2016-09-11 4 views
-1

Я занимаюсь поиском на моем веб-сайте, и мне нужно включить все ограничения, которые мне нужны в моем запросе выбора.subquery MY SQL

В моем поисковом пользователе пользователь может написать ключевое слово, написать минимальную цену и максимальную цену и выбрать между некоторыми категориями, но нет необходимости искать результат, заполнив все поля, как пользователь, которого вы должны быть в состоянии найти, заполнив все или только одним из них, поэтому я должен сделать пролив, чтобы отделить его.

Я пытаюсь что-то вроде:

$var1 = $_POST['var1']; //name - type = text 
$var2 = $_POST['var2']; //min price - type = integer 
$var3 = $_POST['var3']; //max price - type = integer 
$var4 = $_POST['var4']; //array of categories 

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
"AND name like '%$var1%'" 
} 

if(($var2 != NULL || $var2 != '') AND ($var3 != NULL || $var3 != '')){ 
"AND price=>$var2 AND price =>$var3'" 
} 

Здесь у меня есть дополнительные проблемы, потому что я хочу вернуть любую категорию, выбранную пользователем, поэтому сначала он должен быть и продолжить запрос, но то это должно быть OR, между категориями, проблема в том, что последний будет терпеть неудачу.

if($var4 != NULL || $var4 != ''){ 
     " AND("; 
     foreach $var4 as $cat){ 
     "id_category = $cat OR"; 
     } 
     ")"; 
    } 

Любой отзыв? благодаря!

+0

Просто взглянув на ваш код и не тестируя его, кажется, что последняя часть не работает, потому что в конце ее всегда будет конечный ИЛИ. поэтому вы получаете что-то вроде '... AND (id_category = $ cat OR id_category = $ cat OR)', который вызывает синтаксическую ошибку –

+0

, соответствуют ли именам полей именам столбцов db? – RamRaider

+0

Да, это одна из проблем, но я не знаю, как я могу ее решить. @RamRaider да, они делают! –

ответ

0

Попробуйте использовать функцию взрывать РНР:

" AND(" . implode("OR ", $var4) . ")" 

Вы хотите, чтобы убедиться, что $ вар не является пустым массивом.

Кроме того, пожалуйста, прочитайте на SQL Injection и как правильно избежать запросов SQL с PHP, так что ваш код взаимодействия с базой данных является безопасным:

http://php.net/manual/en/security.database.sql-injection.php

http://php.net/manual/en/pdo.prepared-statements.php

+0

Спасибо, но я делал неправильный запрос! –

0

Спасибо, но я делал неправильный запрос!

Решение было:

$select_query = "SELECT * FROM objects WHERE x=1"; 

if($var1 != NULL || $var1 != ''){ 
$select_query = "AND name like '%$var1%'" 
} 

Я сделал последний пример с для.

Спасибо всем!