2014-12-05 3 views
0

EDIT ** Не уверен, что эта дополнительная информация поможет, но попытается сохранить ее просто.Является ли это семантически правильным поиском SQLite?

Данные выбираются пользователем по форме html (до трех вариантов для «пол», до шести для «цвета», а затем может быть выбран один ценовой диапазон), эти данные обрабатываются в jquery, чтобы построить строку ниже и сохранить ее в переменной. Затем переменная используется как запрос sql, строка запроса, отображаемая ниже, является выходом этой переменной.

Я отладка в инструментах разработчика Chrome, нет никаких ошибок, показывающих **


Есть что-нибудь не так с этой строкой запроса?

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

Значения верны в том, что они соответствуют дБ. Честно говоря, он, кажется, возвращает то, что ему нравится. Я надеюсь, что для кого-то сразу станет очевидным, что я сделал неправильно, потому что я невежественный новичок.

Любая помощь была бы оценена по достоинству! : D


EDIT ** выше теперь заменен, который работает отрабатывает при копировании его, как это!

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

мне приходится использовать RegExp для создания строки в 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 пола, «AND gender =» mens »или gender =« womens »' является избыточным. –

+0

@ david strachan Это остановит работу? – RyanUK

+0

@davidstrachan Я добавил дополнительную информацию – RyanUK

ответ

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

+0

Постараюсь проверить это, когда я добрался до своего компьютера, и он работает! Проблема s Мне нужно использовать RegExp.exec, и я боюсь, я думаю. Я поставил код выше, если вы можете помочь – RyanUK

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

+0

Вы генерируете запрос в javascript и отправляете его как POST или GET? –

+0

Я тоже использую локальное хранилище. SQLite - я добавил новый код выше – RyanUK

Смежные вопросы