这个问题已经在这里有了答案 :
7年前关闭。
可能重复:
mysql是多列数组
我有两个表:
帖子表
PostID | Gallery
1 | 4,7,8,12,13
2 | 1,2,3,4
3 | 5,8,9
4 | 3,6,11,14
Gallery中的值是Images表中的主键:
图片表
ImageID | FileName
1 | something.jpg
2 | lorem.jpg
3 | ipsum.jpg
4 | what.jpg
5 | why.jpg
我之所以这样做,而不仅仅是在Images表中添加PostID键,是因为这些图像可以与许多不同的帖子相关联。我想我可以为关系添加另一个表,但是就我要添加到其中的jQuery脚本而言,逗号分隔的值更易于使用。
如果我在需要与PostID 3关联的图像的页面上,我可以运行哪种查询来为其输出所有文件名?
您可以使用以下解决方案:
SELECT b.filename
FROM posts a
INNER JOIN images b ON FIND_IN_SET(b.imageid, a.gallery) > 0
WHERE a.postid = 3
SQLFiddle
但是,您应该真正规范化设计,并在帖子和图片之间使用交叉引用表。这将是表示N:M(多对多)关系的最好,最有效的方法。它不仅检索效率更高,而且将大大简化
更新 和 删除 图像关联的过程。
…但是就我要添加到其中的jQuery脚本而言,逗号分隔的值更易于使用。
即使您用交叉引用表正确表示了N:M关系,您仍然可以imageid
CSV格式获取的:
假设你有一个posts_has_images
与主键字段(表postid
,imageid
):
您可以使用GROUP_CONCAT()
获得的CSV imageid
的每个postid
:
SELECT postid, GROUP_CONCAT(imageid) AS gallery
FROM posts_has_images
GROUP BY postid
问题内容: 我有2张桌子如下 笔记表 职位表 我想查询我的Notes表并将’forDepts’列与Positions表中的值相关联。 输出应为: 我知道数据库应该规范化,但是我不能更改此项目的数据库结构。 这将用于使用以下代码导出excel文件。 此代码仅输出“ forDepts”的第一个值 考试:执行人员(而不是执行人员,公司行政人员,Art) 可以通过CONCAT或FIND_IN_SET完成吗
问题内容: 我有2张桌子和。表包含客户的电子邮件。 我正在使用PHP-IMAP从电子邮件服务器获取电子邮件,然后将其保存到数据库表。 该表有2个字段,并且字段包含逗号分隔的值。 我需要获取从第一台邮件,然后搜索对与上。 首先,我考虑了要搜索的条件,但我想拥有类似的东西或其他东西。 我怎样才能更好地做到这一点?(由于某些原因,我无法在此表上使用关系) 请指教。 问题答案: 基于FIND_IN_SET
我如何修改我的regex来为那些以“”或“,”开头,以“”或“,”结尾的字符串返回false
问题内容: 我有一个字符串,其中包含格式货币值(如)和多个值(以逗号分隔)。 我想提取并处理所有货币值,但无法为此找到正确的正则表达式,这是我尝试过的 输出为: 有人可以帮我这个吗? 问题答案: 您需要一个正则表达式“向后看” ,它匹配但确实消耗: 这是您现在可以使用的测试用例: 输出:
问题内容: 我想在MySQL中将选定的值转换为逗号分隔的字符串。我的初始代码如下: 哪个产生了: 我想要的输出看起来像这样: 问题答案: 检查一下
我有几个表我需要加入,我不能改变数据库,因为它正在多个不同的应用程序中使用。 第一个表如下所示