2011-03-17 57 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