sql >> Databasteknik >  >> RDS >> Mysql

När ska man använda kommaseparerade värden i en DB-kolumn?

Du vet redan svaret.

För det första är din PHP-kod inte ens i närheten av att fungera eftersom den bara fungerar om användare 2 bara har ett enda värde i LookingFor eller Drugs. Om någon av dessa kolumner innehåller flera kommaseparerade värden fungerar IN inte även om dessa värden är i exakt samma ordning som Användare 1:s värden. Vad förväntar du dig att IN ska göra om höger sida har ett eller flera kommatecken?

Därför är det inte "lätt" att göra vad du vill i PHP. Det är faktiskt ganska jobbigt och skulle innebära att dela upp användare 2:s fält i enskilda värden, skriva dynamisk SQL med många OR för att göra jämförelsen och sedan göra en extremt ineffektiv fråga för att få resultaten.

Dessutom det faktum att du till och med behöver skriva PHP-kod att svara på en så relativt enkel fråga om skärningspunkten mellan två uppsättningar betyder att din design är mycket felaktig. Det här är exakt den typen av problem (relationell algebra) som SQL finns för att lösa. En korrekt design låter dig lösa problemet i databasen och implementera sedan helt enkelt ett presentationslager ovanpå i PHP eller någon annan teknik.

Gör det på rätt sätt så blir det mycket lättare.



  1. Gör skillnad mellan "inga rader påverkades" och rader som har uppdaterats framgångsrikt - till samma värde (MySQL och PHP)

  2. Design av rekommendationsmotordatabasen?

  3. SQL-servern som motsvarar GROUP_CONCAT()

  4. beräkna de flesta användare någonsin online med MySQL