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

Comando MySQL per cercare CSV (o array simile)

Il modo corretto per gestirlo in SQL consiste nell'aggiungere un'altra tabella per una proprietà multivalore. È contro il modello relazionale memorizzare più valori discreti in una singola colonna. Dal momento che è destinato a essere un no-no, c'è poco supporto per esso nel linguaggio SQL.

L'unica soluzione per trovare un determinato valore in un elenco separato da virgole consiste nell'utilizzare espressioni regolari, che in generale sono brutte e lente. Devi gestire casi limite come quando un valore può essere o meno all'inizio o alla fine della stringa, nonché accanto a una virgola.

SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';

Esistono altri tipi di query che sono facili quando si dispone di una tabella normalizzata, ma difficili con l'elenco separato da virgole. L'esempio che fornite, della ricerca di un valore uguale o maggiore dei criteri di ricerca, è uno di questi casi. Considera anche:

  • Come faccio a eliminare un elemento da un elenco separato da virgole?
  • Come faccio ad assicurarmi che l'elenco sia in ordine?
  • Qual ​​è il numero medio di camere?
  • Come faccio a garantire che i valori nell'elenco siano anche voci valide? Per esempio. cosa mi impedisce di inserire "1,2,banana"?

Se non vuoi creare una seconda tabella, trova un modo per rappresentare i tuoi dati con un unico valore.

Più precisamente, dovrei dire che ti consiglio di rappresentare i tuoi dati con un unico valore per colonna e la soluzione di Mike Atlas riesce a farlo.