Det verkar som om du vill göra en arrayskärning, förutom att din array är en enda kolumn. Det kan göras, men det kommer att vara långsamt, svårt att felsöka och kommer inte att utnyttja kraften i relationsdatabaser. Ett bättre sätt skulle vara att ändra ditt tabellschema till något i stil med detta:
Tabellgrupper
group_id int unsigned not null auto_increment primary key,
character_list text
Tabellmedlemmar_i_grupp
group_id int unsigned not null,
group_member varchar(45) not null
Sedan kan du fråga så här:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
groups
tabellen är förmodligen mycket lik din nuvarande tabell. members_in_groups
Tabellen är samma data uppdelad i lättsökbara delar.
ETA givet din kommentar borde detta fungera om du kan garantera att varje character_list
innehåller bara en instans av varje tecken:
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;
I det här fallet HAVING
klausul måste vara lika med 3 eftersom det finns 3 medlemmar i IN ('Mr. T', 'Apollo', 'Rocky')
.