Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Campo MySQL único com valores separados por vírgula


Você pode usar esta solução:
SELECT b.filename
FROM posts a
INNER JOIN images b ON FIND_IN_SET(b.imageid, a.gallery) > 0
WHERE a.postid = 3

SQLFiddle

No entanto, você deve realmente normalizar seu design e usar uma tabela de referência cruzada entre postagens e imagens. Essa seria a melhor e mais eficiente maneira de representar relacionamentos N:M (muitos-para-muitos). Não só é muito mais eficiente para recuperação, mas também simplificará muito a atualização e excluindo associações de imagens.

Mesmo se você representar corretamente o relacionamento N:M com uma tabela de referência cruzada, ainda poderá obter o imageid 's em formato CSV:

Suponha que você tenha um posts_has_images tabela com campos de chave primária (postid , imageid ):

Você pode usar GROUP_CONCAT() para obter um CSV do imageid 's para cada postid :
SELECT postid, GROUP_CONCAT(imageid) AS gallery
FROM posts_has_images
GROUP BY postid