我有两个表格书籍和标签,它们通过表books_tags处于多对多的关系。我想要做的是选择所有具有一个或多个标记(如'%tag%')的图书。没问题。但是,我也有一个group_concat字段,我想填充与选定图书相关的所有标签。MySQL多对多关系选择条件
我的选择查询基本上是这样的:
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;
这可以实现所需的结果,如果我没有任何条件。我使用PHP和json_decode来读取标签字段。 我尝试过三种不同的方法来过滤结果,但没有一个能起作用。
用途,其中:
where flbdb_tags.name like '%poetr%'
然而,这意味着该标记字段(即,使用GROUP_CONCAT组装所述一个)仅填充有该标签的
具有
使用having flbdb_tags.name like '%poetr%'
这不返回所有书籍标记诗歌,因为在某些情况下,诗歌标签背后却隐藏着另一个标签由于组具有
having tags like '%poetr%'
这将在GROUP_CONCAT场
使用实际上做的伎俩,但我需要做的不区分大小写的搜索,和上(标签)不起作用
我希望这是清楚我想做的事情。
谢谢
为什么你的#3解决方案没有工作?像这样做一个类似的搜索是不区分大小写的。使用''%poetry%''',''%POETRY%''或甚至'%pOeTrY%'没有区别' –
这可能是使用'inner_join'的好例子。 –
@布莱恩我不知道为什么,但在这种情况下,像不区分大小写。也许是因为group_concat? – flammel