Het lijkt erop dat u een matrixdoorsnijding wilt maken, behalve dat uw matrix een enkele kolom is. Het kan worden gedaan, maar het zal traag zijn, moeilijk te debuggen en zal geen gebruik maken van de kracht van relationele databases. Een betere manier zou zijn om uw tabelschema in iets als dit te veranderen:
Tafelgroepen
group_id int unsigned not null auto_increment primary key,
character_list text
Table members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Dan kun je als volgt opvragen:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
De groups
tafel lijkt waarschijnlijk erg op uw huidige tafel. De members_in_groups
tabel is dezelfde data opgedeeld in gemakkelijk doorzoekbare delen.
ETA gezien je reactie, zou dit moeten werken als u kunt garanderen dat elke character_list
bevat slechts één instantie van elk teken:
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;
In dit geval de HAVING
clausule moet gelijk zijn aan 3 omdat er 3 leden zijn in IN ('Mr. T', 'Apollo', 'Rocky')
.