配列が単一の列であることを除いて、配列の共通部分を実行したいようです。それは可能ですが、遅く、デバッグが難しく、リレーショナルデータベースの力を活用できません。より良い方法は、テーブルスキーマを次のようなものに変更することです。
テーブルグループ
group_id int unsigned not null auto_increment primary key,
character_list text
テーブルmembers_in_group
group_id int unsigned not null,
group_member varchar(45) not null
次に、次のようにクエリできます:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
テーブルはおそらく現在のテーブルと非常によく似ています。 members_in_groups
表は、簡単に検索できる部分に切り刻まれた同じデータです。
ETAがあなたのコメントを与えた場合、これはの場合に機能するはずです。 各character_list
1つのみが含まれています 各キャラクターのインスタンス:
SELECT group_id,
SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally,
character_list
FROM groups g
JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;
この場合、HAVING
IN ('Mr. T', 'Apollo', 'Rocky')
には3つのメンバーがあるため、句は3に等しくなければなりません。 。