У меня есть две таблицы книг и тегов, которые связаны многими со многими через таблицу books_tags.Что я хочу сделать, это выбрать все книги, которые имеют один или несколько тегов, таких как "% tag%".Нет проблем.Однако у меня также есть поле group_concat, которое я хочу заполнить всеми тегами, относящимися к выбранной книге.
Мой запрос на выборку в основном выглядит следующим образом:
select
flbdb_books.id,
flbdb_books.title,
flbdb_tags.id,
flbdb_tags.name,
group_concat(distinct concat('["', flbdb_tags.id, '","', flbdb_tags.name, '"]') separator ',') as tags
from
flbdb_books
join flbdb_books_tags
on flbdb_books.id = flbdb_books_tags.book_id
join flbdb_tags
on flbdb_tags.id = flbdb_books_tags.tag_id
group by flbdb_books.id;
Thisдает желаемый результат, если у меня нет никаких условий.Я использую PHP и json_decode для чтения поля тегов.Я пробовал три разных способа фильтрации результатов, но ни один из них не работает.
используйте где:
where flbdb_tags.name like '%poetr%'
однако этоозначает, что поле тегов (поле, собранное с использованием group_concat) заполняется только этим тегом
, используя
having flbdb_tags.name like '%poetr%'
thisне возвращает все книги с тегами поэзия, потому что в некоторых случаях тег поэзии скрывается за другим тегом из-за группы с помощью
с использованием поля group_concat
having tags like '%poetr%'
это действительно помогло бы, но мне нужно выполнить поиск без учета регистра, а верхний (теги) не работает
Я надеюсь, что этоясно, что я хочу сделать.
Спасибо