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

MySQL-kommando til at søge i CSV (eller lignende array)

Den korrekte måde at håndtere dette på i SQL er at tilføje endnu en tabel for en egenskab med flere værdier. Det er imod den relationelle model at gemme flere diskrete værdier i en enkelt kolonne. Da det er beregnet til at være et nej-nej, er der lidt understøttelse for det i SQL-sproget.

Den eneste løsning for at finde en given værdi i en kommasepareret liste er at bruge regulære udtryk, som generelt er grimme og langsomme. Du er nødt til at forholde dig til kanttilfælde, f.eks. når en værdi muligvis er i starten eller slutningen af ​​strengen, såvel som ved siden af ​​et komma.

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

Der er andre typer forespørgsler, der er nemme, når du har en normaliseret tabel, men svære med den kommaseparerede liste. Det eksempel, du giver, på at søge efter en værdi, der er lig med eller større end søgekriterierne, er et sådant tilfælde. Overvej også:

  • Hvordan sletter jeg et element fra en kommasepareret liste?
  • Hvordan sikrer jeg, at listen er i sorteret rækkefølge?
  • Hvad er det gennemsnitlige antal værelser?
  • Hvordan sikrer jeg, at værdierne på listen er gyldige poster? For eksempel. hvad forhindrer mig i at indtaste "1,2,banan"?

Hvis du ikke vil oprette en anden tabel, så kom med en måde at repræsentere dine data med en enkelt værdi.

Mere præcist vil jeg sige, at jeg anbefaler, at du repræsenterer dine data med en enkelt værdi pr. kolonne , og Mike Atlas' løsning opnår det.



  1. Hvorfor er SUPER-privilegier deaktiveret, når binær logning er aktiveret?

  2. MySQL ASIN() Funktion – Returner Arc Sinus for et tal

  3. Oracle XE 11g XE-databasen blev ikke fundet

  4. Symfony2 Doctrine - ILIKE-klausul for PostgreSQL?