可能重复:
mysql是多列中的数组
我有两张桌子:
帖子表
PostID | Gallery
1 | 4,7,8,12,13
2 | 1,2,3,4
3 | 5,8,9
4 | 3,6,11,14
Run Code Online (Sandbox Code Playgroud)
Gallery中的值是Images表中的主键:
图像表
ImageID | FileName
1 | something.jpg
2 | lorem.jpg
3 | ipsum.jpg
4 | what.jpg
5 | why.jpg
Run Code Online (Sandbox Code Playgroud)
我这样做的原因,而不是只是将一个PostID键添加到Images表是因为这些图像可以与很多不同的帖子相关联.我想我可以为关系添加另一个表,但是就我用来添加它的jQuery脚本而言,逗号分隔值更容易使用.
如果我在一个需要与PostID 3相关联的图像的页面上,我可以运行什么样的查询来输出它的所有文件名?
Zan*_*ien 25
您可以使用此解决方案:
SELECT b.filename
FROM posts a
INNER JOIN images b ON FIND_IN_SET(b.imageid, a.gallery) > 0
WHERE a.postid = 3
Run Code Online (Sandbox Code Playgroud)
但是,您应该真正规范化您的设计并在帖子和图像之间使用交叉引用表.这将是表示N:M(多对多)关系的最佳和最有效的方式.它不仅更有效地进行检索,而且可以极大地简化更新和删除图像关联.
...但是,就我用来添加的jQuery脚本而言,逗号分隔值更容易使用.
即使您使用交叉引用表正确表示N:M关系,您仍然可以获得imageidCSV格式:
假设您有一个posts_has_images包含主键字段(postid,imageid)的表:
您可以使用GROUP_CONCAT()获得的CSV imageid的每个postid:
SELECT postid, GROUP_CONCAT(imageid) AS gallery
FROM posts_has_images
GROUP BY postid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17642 次 |
| 最近记录: |