Siema

Robię funkcjonalność, która pozwala wyszukać posty na blogu po tagach.

Niby nic specjalnego, ale zastanawiam się czy moje zapytania da się ulepszyć.

Generalnie celem jest zrobienie zapytania, które pokaże tylko te posty, które mają wszystkie wybrane przez użytkownika tagi. Czyli jeśli mamy wprowadzony tag A i B to oba tagi musi mieć post, inaczej nie powinien być w zbiorze wyników.

Funkcjonalność korzysta na razie z dwóch zapytań, pierwsze pobiera id postów, ponieważ zrobiłem tutaj grupowanie, a drugi jest prostszy, ponieważ pobiera posty na podstawie listy id.

Zastanawiam się czy takie zapytanie da się uprościć / lepiej zrobić.

Poniżej załączam pierwsze zapytanie w PostgreSQL. Dodatkowo trochę składni dziwnie wygląda, ponieważ dodatkowo korzystam ze składni, który dynamicznie osadza wartości w zapytaniu.

SELECT
  P.id
FROM
  post AS P
INNER JOIN post_tags TAG ON P.id = TAG.post_id
WHERE
  TAG.name IN (:v*:tag_names)
GROUP BY
  P.id
HAVING
  COUNT(P.id) = :tag_count