Es scheint, dass Sie eine Array-Schnittmenge erstellen möchten, außer dass Ihr Array eine einzelne Spalte ist. Es ist möglich, aber es wird langsam, schwierig zu debuggen sein und die Leistungsfähigkeit relationaler Datenbanken nicht nutzen. Ein besserer Weg wäre, Ihr Tabellenschema so zu ändern:
Tabellengruppen
group_id int unsigned not null auto_increment primary key,
character_list text
Tabelle members_in_group
group_id int unsigned not null,
group_member varchar(45) not null
Dann können Sie so abfragen:
SELECT group_id, character_list
FROM groups g
JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);
Die groups
Tabelle ist Ihrer aktuellen Tabelle wahrscheinlich sehr ähnlich. Die members_in_groups
Tabelle sind dieselben Daten, die in leicht durchsuchbare Teile zerhackt sind.
ETA Angesichts Ihres Kommentars sollte dies funktionieren, wenn Sie können garantieren, dass jede character_list
enthält nur eine Instanz jedes Zeichens:
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 diesem Fall das HAVING
-Klausel muss gleich 3 sein, da IN ('Mr. T', 'Apollo', 'Rocky')
3 Elemente enthält .