我有兩個表格書籍和標籤,它們通過表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