Tampaknya Anda ingin melakukan persimpangan array, kecuali array Anda adalah satu kolom. Itu bisa dilakukan, tetapi akan lambat, sulit untuk di-debug dan tidak akan memanfaatkan kekuatan database relasional. Cara yang lebih baik adalah dengan mengubah skema tabel Anda menjadi seperti ini:
Grup tabel
group_id int unsigned not null auto_increment primary key,
character_list text
Tabel member_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Kemudian Anda dapat menanyakan seperti ini:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
tabel mungkin sangat mirip dengan tabel Anda saat ini. members_in_groups
tabel adalah data yang sama yang dipotong menjadi bagian-bagian yang mudah dicari.
ETA memberikan komentar Anda, ini akan berfungsi jika Anda dapat menjamin bahwa setiap character_list
hanya berisi satu contoh setiap karakter:
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;
Dalam hal ini HAVING
klausa harus sama dengan 3 karena ada 3 anggota di IN ('Mr. T', 'Apollo', 'Rocky')
.