2013-10-03 5 views
0

У меня есть две таблицы:MySQL выбрать, где если переменная установлена ​​

  • продаж
  • sales_sizes

Я хочу сделать запрос для sales_sizes стесненных переменных $ пола, $ категории и $ бренд.

Как сделать инструкцию where, если установлены отдельные переменные, и не включать их в запрос, если они не установлены?

[псевдо-код в скобках]

SELECT size, country 
FROM `sales_sizes` WHERE sale_id IN (
    SELECT sale_id 
    FROM `sales` 
    WHERE [gender = $gender if $gender isset] 
    AND [category = $category if $category isset] 
    AND [brand = $brand if $brand isset] 

) 
+0

Вы используете PDO или создаете запрос как текст? – user4035

+0

построить querry в php? – Naruto

ответ

1

Вы можете собрать ваши переменные в массив, а затем обработать его так:

$gender = 'f'; 
$category = null; 
$brand = 'foo'; 

$rgCondition = ['gender'=>$gender, 'category'=>$category, 'brand'=>$brand]; 
$rgCondition = array_filter($rgCondition, function($x) 
{ 
    //strip null-ed values: 
    return isset($x); 
}); 
$rgWhere  = []; 

foreach($rgCondition as $sField=>$mValue) 
{ 
    $rgWhere[] = '`'.$sField.'` = "'.$mValue.'"'; 
} 
$sWhere = count($rgWhere)?' WHERE '.join(' && ', $rgWhere):''; 
//var_dump($sWhere); 

-У пропускаются строки побега, но не забыть.

+0

отличное решение. благодаря – 2083

0

Используйте сазе UPDATE: Предыдущий синтаксис (как было указано на несколько человек) не работает. Вы можете использовать СЛУЧАЙ следующим образом:

SELECT size, country 
FROM `sales_sizes` WHERE sale_id IN (
    SELECT sale_id 
    FROM `sales` 
    WHERE [gender = $gender if $gender isset] 
    AND [category = $category if $category isset] 
    AND [brand = $brand if $brand isset] 

) 

WHERE gender 
    CASE WHEN gender ($gender) = isset THEN 
    $gender 
    ELSE 
    $gender='NULL' 
    END 
+0

это не сработает, посмотрите синтаксис оператора case http://dev.mysql.com/doc/refman/5.0/en/case.html – user4035

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