Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So vergleichen Sie zwei durch Kommas getrennte Zeichenfolgenlisten mit MySQL

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 .