2014-11-05 2 views
-1

У меня есть эта таблица:MySQL - выбрать, где есть все массив значений

ID | Product_ID | Filter_ID 
1   1     8 
2   1     9 
3   2     10 

У меня есть PHP массив содержит фильтры должны быть проверены:

$arr = (8,9,10); 

Теперь, как убедиться в том, что PRODUCT_ID (1) имеет все фильтры, которые в $ arr?

+0

Я не знаю, чтобы сделать это на самом деле –

+0

использовать 'SELECT * FROM table WHERE filter_id IN (". implode (',', $ arr). ")' –

+0

Неверный ответ с вашего ответа –

ответ

0

Если вы хотите только те product_id, которые имеют все 3 filter_ids, попробуйте следующее:

$sql = "SELECT COUNT(*) AS total, Product_ID FROM `test`.`test` WHERE Filter_ID IN (".implode(', ', $arr).") GROUP BY Product_ID HAVING total >= ". sizeof($arr); 

http://sqlfiddle.com/#!2/e949f/7/0

@edit

Если вам нужно знать только, если конкретный Product_ID имеет все 3 Filter_IDS:

$sql = "SELECT COUNT(*) AS total, Product_ID FROM `test`.`test` WHERE Filter_ID IN (".implode(', ', $arr).") and Product_ID = 1 GROUP BY Product_ID HAVING total >= ". sizeof($arr); 
+0

это сработало для меня, спасибо :) –

+0

ваш приветственный: D –

-1
$arr = [8, 9, 10]; 
$sql = "SELECT * FROM `Table` WHERE `Filter_ID` IN (".implode(', ', $arr).")"; 
+0

это может помочь! Позвольте мне проверить –

+1

'$ arr = [8, 9, 10];' может потребоваться '$ arr = array ('8', '9', '10');' в зависимости от версии PHP. –

+0

array() - это старое объявление массива. –

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