Det ser ud til, at du vil lave et array skæringspunkt, bortset fra at dit array er en enkelt kolonne. Det kan lade sig gøre, men det vil være langsomt, svært at fejlfinde og vil ikke udnytte kraften i relationelle databaser. En bedre måde ville være at ændre dit tabelskema til noget som dette:
Tabelgrupper
group_id int unsigned not null auto_increment primary key,
character_list text
Tabelmedlemmer_i_gruppe
group_id int unsigned not null,
group_member varchar(45) not null
Så kan du forespørge sådan her:
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 er sandsynligvis meget lig din nuværende tabel. members_in_groups
tabel er de samme data skåret op i let søgbare dele.
ETA givet din kommentar, burde dette fungere hvis du kan garantere, at hver character_list
indeholder kun én forekomst af hvert tegn:
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 dette tilfælde HAVING
klausul skal være lig med 3, fordi der er 3 medlemmer i IN ('Mr. T', 'Apollo', 'Rocky')
.