2011-03-17 30 views
0

我正在寫一個測驗應用程序使用phonegap & jquery。我有許多用戶可以從中選擇的問題類別(通過複選框),並且希望建立一個數據庫查詢來根據他們的選擇從相關類別中提取問題。下面的代碼給出了我試圖實現的要點,但是我無法將queryString傳遞到executeSql()方法中。有沒有一個簡單的方法來做到這一點,我錯過了?謝謝,尼克jQuery phonegap應用程序 - 複合數據庫查詢字符串

function queryDB4(tx){ 
var queryString = "SELECT * FROM SBA_TABLE WHERE ("; 

if (toggle_cardiology == 1) 
{ 
    queryString += "cat_cardiology = 1 AND"; 
} 
else if (toggle_respiratory == 1) 
{ 
    queryString += "cat_respiratory = 1" 
} 
// repeat for other categories 

queryString += ") LIMIT 10;"; 
//alert(queryString); 

tx.executeSql(queryString, [], querySuccess3, errorCB); 

}

+0

您正在使用的數據庫。我正在嘗試使用phonegap和JQuery來構建一個,但我擔心使用正確的DB ... – Aniruddha 2013-01-01 04:29:48

回答

0

我認爲問題是,你的查詢字符串是無效的。這裏有一個例子字符串,你的代碼可能產生:

SELECT * FROM SBA_TABLE WHERE (cat_cardiology = 1 AND) LIMIT 10; 

有許多的問題:

  • 追加1=1(或任何其他語句,始終是真實的)處理後AND
  • 省略else子句以允許複選框組合,而不僅僅是第一個複選框。
  • 您需要在AND之後留出空格以避免產生ANDcat_respiratory

將其組合在一起:

if (toggle_cardiology == 1) 
{ 
    queryString += "cat_cardiology = 1 AND "; 
} 

if (toggle_respiratory == 1) 
{ 
    queryString += "cat_respiratory = 1 AND "; 
} 

queryString += "1 = 1) LIMIT 10"; 
+0

謝謝 - 有時需要第二雙眼睛!如果我要使用OR語句而不是AND,是否有一種很好的方式來避免最後一個OR被阻塞?在這種情況下(即SELECT * FROM SBA_TABLE WHERE cat_cardiology = 1或cat_respiratory = 1或1 = 1),由於1 = 1,它看起來只是返回true,所以無論用戶選擇哪個類別,都會顯示第一個數據庫行。或者,我是否必須手動確定哪個是最後一個複選框,然後使用此信息忽略從複合查詢中添加最後的OR? – hairyllama 2011-03-17 23:02:14

+1

想通了。對於有此問題的人,解決方案是使用返回false的語句(即SELECT * FROM SBA_TABLE WHERE cat_cardiology = 1或cat_respiratory = 1或1 = 2)。感謝您的幫助馬克,這是一個偉大的社區。 – hairyllama 2011-03-17 23:09:22

相關問題