2014-12-05 68 views
0

編輯** 不知道這個額外的信息會有幫助,但試圖保持簡單。這是一個語義正確的SQLite搜索查詢嗎?

用戶通過html表單選擇數據(最多三個「性別」選項,最多六個「顏色」,然後可以選擇一個單一的價格範圍),然後這個數據被處理jquery函數來構造下面的字符串並將其保存在一個變量中。然後將該變量用作sql查詢,下面顯示的查詢字符串是此變量的輸出。

我在Chrome的開發者工具進行調試時,有沒有表現出錯誤**


這有什麼不對的查詢字符串?

'SELECT * FROM flipflops WHERE colour="black" OR colour="brown" AND gender="mens" OR gender="womens" AND price<=20' 

值正確,因爲它們與db匹配。說實話,它似乎回到了它所喜歡的東西。我希望對於某人來說,我已經做錯了,因爲我是一個無知的新手。

任何幫助將不勝感激! :d


編輯** 上面現在所取代,後者當你複製它,因爲它是工作的完善!

'SELECT * FROM flipflops WHERE colour IN ("white","navy","blue") AND gender IN ("mens","juniors") AND price >= 20 AND price <= 30' 

我在使用正則表達式來創建jQuery的字符串如下離開了pricerange現在但它從數據庫返回任何內容,我沒有得到控制檯錯誤

var regExp = /\(([^)]+)\)/; 

var queryValue = regExp.exec("SELECT * FROM flipflops WHERE colour IN /(\'" + colourValues.join("','") + "/')\ AND gender IN /(\'" + genderValues.join("','") + "/')\""); 

輸出到控制檯值依賴於形式的價值選擇(抱歉複雜此,我太亂了!)

Array[2] 
0: "('white','blue/')" 
1: "'white','blue/'" 
index: 41input: 
"SELECT * FROM flipflops WHERE colour IN /('white','blue/') AND gender IN /('womens','juniors/')"" 
length: 2 
+0

由於只有2分性別的'和性別=「男士」或性別=「女子」'是多餘的。 – 2014-12-05 10:32:53

+0

@david strachan這會阻止它的工作? – RyanUK 2014-12-05 11:23:51

+0

@davidstrachan我已添加更多信息 – RyanUK 2014-12-05 15:09:26

回答

1

你可能錯過了括號?

SELECT * FROM flipflops 
WHERE 
( 
    colour="black" 
    OR colour="brown" 
) 
AND 
(
    gender="mens" 
    OR gender="womens" 
) 
AND price<=20 

,如果是這樣的話,你可以把它寫這樣還有:

SELECT * FROM flipflops 
WHERE colour IN ("black","brown") 
AND gender IN ("mens","womens") 
AND price<=20 
+0

我已經使用了相同的格式,但不需要操作員,並且工作正常。我已經添加了一些額外的信息,如果有幫助 – RyanUK 2014-12-05 11:35:27

+0

當我到我的電腦,它的工作原理時,要測試這個!問題我不得不使用'RegExp.exec',我想我正在掙扎。我已經把上面的代碼,如果你可以幫助 – RyanUK 2014-12-05 16:44:22

0

下面的代碼創建使用Arions IN()操作例如動態查詢。查詢是建立取決於什麼被點擊框等

<form action="#" method="post"> 
<input type="checkbox" name="color[]" value="Red"><label>Red</label><br/> 
<input type="checkbox" name="color[]" value="Blue"><label>Blue</label><br/> 
<input type="checkbox" name="color[]" value="Brown"><label>Brown</label><br/> 
<!--input type="checkbox" name="gender[]" value="Any"><label>Any</label><br/--> 
<br> 
<input type="checkbox" name="gender[0]" value="Male"><label>Male</label><br/> 
<input type="checkbox" name="gender[1]" value="Female"><label>Female</label><br/> 
<br> 
<input type="text" name="cost" ><label>Cost</label><br/> 
<input type="submit" name="submit" value="Submit"/> 
</form> 
<?php 
// Set up stub of query 
$sql = "SELECT * FROM flipflops "; 
//Set initial WHERE clause 
$clause ="WHERE "; 

if(isset($_POST['submit'])){//to run PHP script on submit 
//Color set up IN() operator 
if(!empty($_POST['color'])){ 
    $sql .= $clause." colour IN ("; 
    // Loop to store and display values of individual checked checkbox. 
    foreach($_POST['color'] as $color){ 
    $sql .= $color.","; 
    } 
    $sql = rtrim($sql, ","); 
    $sql .= ")"; 
    //Set to AND after initial WHERE 
    $clause =" AND "; 
} 
//Gender show only one gender, if 2 genders clicked all 2 genders are selected 
if(!empty($_POST['gender']) && count($_POST['gender']) == 1){ 
    // Loop to store and display values of individual checked checkbox. 
    foreach($_POST['gender'] as $gender){ 
     $sql .= $clause. "gender = ".$gender; 
    } 
    $clause =" AND "; 
} 
//Cost 
if(!empty($_POST['cost'])){ 
    $sql .= $clause." cost = ". $_POST['cost']; 
    } 
} 
echo $sql; 
?> 
+0

謝謝大衛,但它的所有客戶端在jqery中使用SQLite完成 – RyanUK 2014-12-05 16:40:55

+0

您是否在JavaScript中生成查詢並將其作爲POST或GET發送? – 2014-12-05 16:45:27

+0

我也沒有使用本地存儲。 SQLite - 我已經在上面添加了新的代碼 – RyanUK 2014-12-05 16:55:10