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

Campo MySQL singolo con valori separati da virgole

Puoi usare questa soluzione:

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

SQLFiddle

Tuttavia, dovresti davvero normalizzare il tuo design e utilizzare una tabella di riferimento incrociato tra post e immagini. Questo sarebbe il modo migliore e più efficiente per rappresentare le relazioni N:M (molti-a-molti). Non solo è molto più efficiente per il recupero, ma semplificherà enormemente l'aggiornamento e eliminazione associazioni di immagini.

Anche se hai rappresentato correttamente la relazione N:M con una tabella di riferimento incrociato, puoi comunque ottenere l'imageid è in formato CSV:

Supponi di avere un posts_has_images tabella con campi chiave primaria (postid , imageid ):

Puoi usare GROUP_CONCAT() per ottenere un CSV di imageid 's per ogni postid :

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