PHP - категория SQL Filter в одном запросе

0

У меня есть 3 таблицы в моей базе данных: Categories, Category_relationships и Article.

Category_relationships похоже

id | category | article
---+----------+--------
1  |     2    |   3
2  |     4    |   3

Im получает URL-адрес: filter.php?category[]=2&category[]=4

Я хочу перечислить статью 3 с одним SQL-запросом.
Как я могу это сделать?

И извините за мой английский :)

Теги:

1 ответ

0

Для получения желаемых результатов может быть несколько подходов. Следующие запросы основаны на том, чтобы соответствовать, если статья имеет эти две категории, если есть 3 категории, и вам нужно применять соответствующие критерии 3 раза с разными идентификаторами категории для каждого соответствия

Использование агрегации

select a.id, a.name
from article a
join category_relationships cr on a.id = cr.article_id
join category c on c.id = cr.category_id
group by  a.id, a.name
having count(case when c.id = 2 then 1 else null) > 0
and count(case when c.id = 4 then 1 else null) > 0

или же

select a.id, a.name
from article a
join category_relationships cr on a.id = cr.article_id
join category c on c.id = cr.category_id
where c.id in(2,4)
group by a.id, a.name
having count(c.id) = 2 

Здесь 2 является переменной, зависит от того, сколько категорий должно совпадать. Также, если есть вероятность дублирования, например, есть несколько записей в одной статье с одинаковым идентификатором категории, то используйте счетчик (отчетный c.id) = 2

Использование EXISTS

select a.id, a.name
from article a
where exists(
    select 1
    from category_relationships 
    where a.id = article_id
    and category_id = 2
) and exists(
    select 1
    from category_relationships 
    where a.id = article_id
    and category_id = 4
)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню