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

So suchen Sie nach einem kommagetrennten Wert

Kurzfristige Lösung

Verwenden Sie die FIND_IN_SET-Funktion :

WHERE FIND_IN_SET('Queensland', csv_column)

... weil die Verwendung von LIKE mit Platzhaltern an beiden Enden riskant ist, je nachdem, wie viele/wenige Übereinstimmungen vorhanden sind (und es stellt auch einen Tabellenscan sicher). Die Leistung von LIKE mit Platzhaltern auf beiden Seiten ist auf Augenhöhe mit REGEXP – das bedeutet schlecht.

Langfristige Lösung

Speichern Sie keine durch Kommas getrennten Werte – verwenden Sie eine richtige Viele-zu-Viele-Beziehung mit drei Tabellen:

Dinge

  • thing_id (Primärschlüssel)

Australische Staaten

  • State_id (Primärschlüssel)
  • Staatsname

Things_to_Auz_States

  • thing_id (Primärschlüssel, Fremdschlüssel zu THINGS Tabelle)
  • State_id (Primärschlüssel, Fremdschlüssel zu AUSTRALIAN_STATES Tabelle)

Sie benötigen JOINs, um Daten aus den drei Tabellen zu erhalten, aber wenn Sie wissen möchten, wie viele mit einem bestimmten Status oder zwei bestimmten Status verknüpft sind, ist dies das richtige Modell.