お粗末なデータ構造があります。タグは、アイテムとタグごとに 1 つの行を持つ別のテーブルに格納する必要があります。したがって、特定の行には 15 個のタグが含まれる場合があります。その後、クエリは非常に単純になります。
クエリを簡素化する 1 つの方法は、次を使用することin
です。
select *
from table1 t1 join
tabl2 t2
on t1.tag1 in (t2.tag1, t2.tag3, . . . , t2.tag15) or
t1.tag2 in ( . . . ) or
. . .
NULL
これは、タグの値に対しても機能すると思います。
編集:
コンマ区切りのリストは、個別の列よりもさらに悪いです。MySQL では、次のことができます。
on find_in_set(substring_index(t1.tags, ',', 1), t2.tags) > 0 or
find_in_set(substring_index(substring_index(t1.tags, ',', 2), -1), t2.tags) > 0 or
find_in_set(substring_index(substring_index(t1.tags, ',', 3), -1), t2.tags) > 0 or
. . .
正しい方法は、次のような列を持つ 2 つのテーブルを用意することです。
と
次に、クエリは次のとおりです。
select *
from table1tags t1t join
table2tags t2t
on t1t.tag = t2t.tag;
他の選択肢よりもはるかに簡単です。