sql >> Databasteknik >  >> RDS >> Mysql

MySQL-kommando för att söka i CSV (eller liknande array)

Det korrekta sättet att hantera detta i SQL är att lägga till ytterligare en tabell för en egenskap med flera värden. Det strider mot relationsmodellen att lagra flera diskreta värden i en enda kolumn. Eftersom det är tänkt att vara ett nej-nej, finns det lite stöd för det i SQL-språket.

Den enda lösningen för att hitta ett givet värde i en kommaseparerad lista är att använda reguljära uttryck, som i allmänhet är fula och långsamma. Du måste ta itu med kantfall som när ett värde kan eller inte kan vara i början eller slutet av strängen, samt bredvid ett kommatecken.

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

Det finns andra typer av frågor som är lätta när du har en normaliserad tabell, men svåra med den kommaseparerade listan. Exemplet du ger, på att söka efter ett värde som är lika med eller större än sökkriteriet, är ett sådant fall. Tänk också på:

  • Hur tar jag bort ett element från en kommaseparerad lista?
  • Hur säkerställer jag att listan är i sorterad ordning?
  • Vad är det genomsnittliga antalet rum?
  • Hur säkerställer jag att värdena i listan ens är giltiga poster? T.ex. vad hindrar mig från att skriva "1,2,banan"?

Om du inte vill skapa en andra tabell, kom sedan på ett sätt att representera dina data med ett enda värde.

Mer exakt bör jag säga att jag rekommenderar att du representerar din data med ett enda värde per kolumn , och Mike Atlas lösning åstadkommer det.



  1. PHP &MySQL jämför lösenord

  2. Hur lägger man en sträng till ett kolumnvärde i MySQL?

  3. Migrerar alla till molnet?

  4. Tips HINT_PASS_DISTINCT_THROUGH minskar antalet enheter som returneras per sida för en PageRequest till under den konfigurerade sidstorleken (PostgreSQL)