Wygląda na to, że chcesz wykonać przecięcie tablicy, z wyjątkiem tego, że twoja tablica jest pojedynczą kolumną. Można to zrobić, ale będzie to powolne, trudne do debugowania i nie będzie wykorzystywało mocy relacyjnych baz danych. Lepszym sposobem byłaby zmiana schematu tabeli na coś takiego:
Grupy tabel
group_id int unsigned not null auto_increment primary key,
character_list text
Tabela members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Następnie możesz zapytać w ten sposób:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
stół jest prawdopodobnie bardzo podobny do twojego obecnego stołu. members_in_groups
tabela to te same dane pocięte na łatwe do przeszukiwania części.
ETA biorąc pod uwagę Twój komentarz, to powinno działać jeśli możesz zagwarantować, że każdy character_list
zawiera tylko jeden wystąpienie każdego znaku:
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;
W tym przypadku HAVING
klauzula musi być równa 3, ponieważ w IN ('Mr. T', 'Apollo', 'Rocky')
.