Mysql
 sql >> Base de données >  >> RDS >> Mysql

Champ MySQL unique avec des valeurs séparées par des virgules

Vous pouvez utiliser cette solution :

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

SQLFiddle

Cependant, vous devriez vraiment normaliser votre conception et utiliser une table de correspondance entre les messages et les images. Ce serait le moyen le meilleur et le plus efficace de représenter les relations N:M (plusieurs à plusieurs). Non seulement c'est beaucoup plus efficace pour la récupération, mais cela simplifiera grandement la mise à jour et supprimer associations d'images.

Même si vous avez correctement représenté la relation N:M avec une table de références croisées, vous pouvez toujours obtenir le imageid au format CSV :

Supposons que vous ayez un posts_has_images table avec les champs de clé primaire (postid , imageid ):

Vous pouvez utiliser GROUP_CONCAT() pour obtenir un CSV de l'imageid 's pour chaque postid :

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