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

Come cercare un valore separato da virgole

Soluzione a breve termine

Usa la funzione TROVA_IN_SET :

WHERE FIND_IN_SET('Queensland', csv_column)

...perché usare LIKE con caratteri jolly su entrambe le estremità è rischioso, a seconda di quante/piccole corrispondenze (e garantisce anche una scansione della tabella). Le prestazioni di LIKE con caratteri jolly su entrambi i lati sono alla pari con REGEXP, il che significa cattivo.

Soluzione a lungo termine

Non memorizzare valori separati da virgole:utilizza una corretta relazione molti-a-molti, che coinvolga tre tabelle:

Cose

  • thing_id (chiave principale)

Stati australiani

  • State_id (chiave primaria)
  • Nome_Stato

Cose_per_Auz_Stati

  • thing_id (chiave primaria, chiave esterna per THINGS tabella)
  • State_id (chiave primaria, chiave esterna per AUSTRALIAN_STATES tabella)

Avrai bisogno di JOIN per ottenere i dati dalle tre tabelle, ma se vuoi sapere cose come quante sono associate a uno stato particolare o due stati particolari, è il modello corretto.