私はこのようなクエリがある:タグを検索するときに、そのタグのすべてを含む記事を取得するにはどうすればよいですか?
select ...,
group_concat(tag.string separator '|') as tags
from article a
left join articletag on a.id = articletag.a_id
left join tag on tag.id = articletag.t_id
where /* OR product of (column like %term%) */
group by a.id
問題はマッチがタグに発生したとき、それは私の「グループ化」を破壊し、一列のみを返すということです。
少なくとも1つの行がマッチすると、グループ全体がどのようにパフォーマンスが低下しますか?
例:それはtag.string like '%tag 1%'
が含まれている場合、現在のクエリが(2, 'article 2', 'long content', 'tag 1')
を返します
article
id | title | content
2 | article 2 | long content
tag
id | string
1 | tag 1
2 | tag 2
4 | tag 4
articletag
a_id | t_id
2 | 1
2 | 2
2 | 4
。
または(2, 'article 2', 'long content', 'tag 1|tag 2')
'tag 2'
を検索するときに、私はあなたの現在のアプローチと(2, 'article 2', 'long content', 'tag 1|tag 2|tag 4')
いくつかのサンプルをデータはここで長い道のりになります。 –
私はそれをもっと一般的に書こうとしましたが、今追加するために編集します – Artis