sql >> Databasteknik >  >> RDS >> Mysql

Hur man söker efter ett kommaseparerat värde

Kortsiktig lösning

Använd FIND_IN_SET-funktionen :

WHERE FIND_IN_SET('Queensland', csv_column)

...för att använda LIKE med jokertecken i båda ändar är riskabelt, beroende på hur mycket/lite som matchar (och det säkerställer också en tabellskanning). Prestanda för LIKE med jokertecken på båda sidor är i nivå med REGEXP – det betyder dåligt.

Långsiktig lösning

Lagra inte kommaseparerade värden – använd en riktig många-till-många-relation, som involverar tre tabeller:

Saker

  • thing_id (primärnyckel)

Australiensiska stater

  • State_id (primärnyckel)
  • State_name

Things_to_Auz_States

  • thing_id (primärnyckel, främmande nyckel till THINGS tabell)
  • State_id (primärnyckel, främmande nyckel till AUSTRALIAN_STATES tabell)

Du behöver JOINs för att få ut data från de tre tabellerna, men om du vill veta saker som hur många som är associerade till ett visst tillstånd, eller två särskilda tillstånd, är det rätt modell.



  1. Dela kommaseparerad sträng i en PL/SQL-lagrad proc

  2. Unik nyckel med NULL

  3. Filtrerade index och INKLUDERADE kolumner

  4. Importera stor csv-fil till mysql-databas med php