sql >> Database teknologi >  >> RDS >> Mysql

Sådan sammenligner du to kommaseparerede strenglister ved hjælp af MySQL

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') .



  1. hvor er de faktiske data i en mysql db gemt på en linux maskine?

  2. MySQL join med where-klausul

  3. PHP &MySQL:Hvordan kan jeg bruge SET @rank=0; i $query=

  4. er der en grænse for hvad sql fiddle kan klare? sql fiddle kompilerer ikke noget og returnerer ingen fejlmeddelelser