JSON массив с айдишниками тегов на фильтр, пустой если нужно взять все не смотря на тег
Надо взять записи из posts, у которых есть указанные теги
Проблема простого posts INNER JOIN post_tags ON post_tags.post_id = posts.id AND (...проверка tagIds...) возникает, когда у поста нет тегов (нет записей в post_tags), а параметр tagIds фильтра на теги и не задаёт, то есть нужно всё равно взять пост, не смотря на то что ему не найдётся смежных записей в post_tags, то есть в какие-то из случаев мне как бы надо делать posts LEFT JOIN post_tags, а в какие-то posts INNER JOIN post_tags
При этом, очевидно, если делать всегда LEFT JOIN, то у меня просто всегда будут все посты, даже если я указал что-то в tagIds
Как решить? ЧЯДНТ?
Можно просто получается делать всегда лефт и вынести условие на tagIds во WHERE 🧐 Я как всегда не очень умный Или нет?
Я бы посоветовал разбирать это на клиенте. Ну, то есть можно сделать LEFT JOIN и в where написать (post_tags @> $tags or $tags = '[]' ) — но я опасаюсь, как бы оптимизатор не начал тупить от такого.
Обсуждают сегодня