blackseabreathe
@blackseabreathe
brackets

SQL выборка по фильтрам с логикой И фильтр1 И фильтр2?

Добрый день.
Помогите, пожалуйста, составить sql запрос, с выборкой товаров где в таблице table есть и фильтр1 и фильтр2 и фльтр3....
table
id(AI) resource_id(int) filter_id(int)
1 54 1
2 54 2
3 54 3

4 55 1
5 55 112
6 55 113

Пытался всяко разно:
$filters = ['1', '2', '3']; // допустим выбранные пользователем фильтры приходят такие
$count = count($filters); // 3


1)
$sql = "SELECT DISTINCT m.id, m.pagetitle FROM `table1` m 
INNER JOIN `filters` f 
ON m.id = f.resource_id WHERE 
f.filter_id IN(".$filters.") 
AND m.template='$template' AND m.published='1' AND m.deleted='0' AND m.isfolder='0'";

так выбирает и 54, и 55 ресурс, так как у них обоих есть filter_id равный 1, то есть логика ИЛИ/ИЛИ, а должен выбрать только тот ресурс, где есть filter_id=1 и filter_id =2 и filter_id=3, то есть 54 ресурс только

Еще пробовал так, но выбирает непонятно что
2)
$sql = "SELECT DISTINCT m.id, m.pagetitle FROM `table1` m 
INNER JOIN 
(SELECT DISTINCT `resource_id` FROM `filters` WHERE `filter_id` IN(".$filters.") 
GROUP BY `resource_id` HAVING COUNT(`filter_id`) >= $count) f 
ON m.id = f.resource_id WHERE
 m.template='$template' AND m.published='1' AND m.deleted='0' AND m.isfolder='0'";
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
blackseabreathe
@blackseabreathe Автор вопроса
brackets
Через минуту после постинга вопроса смог решить проблему так:

$sql = "SELECT DISTINCT m.id, m.pagetitle FROM `table1` m 
INNER JOIN 
(SELECT DISTINCT `resource_id` FROM `filters` 
WHERE `filter_id` IN(".$filters.") 
GROUP BY `resource_id` 
HAVING COUNT(`filter_id`) >= $count) f 
ON m.id = f.resource_id 
WHERE m.template='$template' AND m.published='1' AND m.deleted='0' AND m.isfolder='0'";
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы