sql >> Databasteknik >  >> RDS >> Mysql

Enstaka MySQL-fält med kommaseparerade värden

Du kan använda den här lösningen:

SELECT b.filename
FROM posts a
INNER JOIN images b ON FIND_IN_SET(b.imageid, a.gallery) > 0
WHERE a.postid = 3

SQLFiddle

Du bör dock verkligen normalisera din design och använda en korsreferenstabell mellan inlägg och bilder. Detta skulle vara det bästa och mest effektiva sättet att representera N:M (många-till-många) relationer. Det är inte bara mycket effektivare för hämtning, utan det kommer avsevärt att förenkla uppdatering och ta bort bildassociationer.

Även om du korrekt representerade N:M-relationen med en korsreferenstabell, kan du fortfarande få imageid är i CSV-format:

Anta att du har en posts_has_images tabell med primärnyckelfält (postid , imageid ):

Du kan använda GROUP_CONCAT() för att få en CSV av imageid s för varje postid :

SELECT postid, GROUP_CONCAT(imageid) AS gallery
FROM posts_has_images
GROUP BY postid


  1. Hur timeofday() fungerar i PostgreSQL

  2. Hur man kontrollerar om SQL-databasen är skadad - Lösning för att reparera MDF-fil

  3. Hur kan jag ta bort dubbletter av rader i en tabell

  4. Hur man förstår en FÖRKLARA ANALYS