Mysql 组_CONCAT,返回一行和空问题
我有一个问题,似乎类似于其他人张贴之前,但这些解决方案似乎并不真正适合我 我试图做的是从一个数据库中选择与特定用户(在另一个数据库中找到)相关的行,然后从第三个数据库中选择与之相关的任何附件,因此:Mysql 组_CONCAT,返回一行和空问题,mysql,sql,database,select,Mysql,Sql,Database,Select,我有一个问题,似乎类似于其他人张贴之前,但这些解决方案似乎并不真正适合我 我试图做的是从一个数据库中选择与特定用户(在另一个数据库中找到)相关的行,然后从第三个数据库中选择与之相关的任何附件,因此: 表用户(id是我们从中获取的全部) 表成员资格(我需要员工id和团队id) 表msg_group(id、开始、过期和消息是im关心的) 表msg_attach(id、标识、类型和文件是我在此需要的) 所以。我有一个疑问: SELECT msg_group.message, msg_group.s
- 表
(id是我们从中获取的全部)用户
- 表
(我需要员工id和团队id)成员资格
- 表
(id、开始、过期和消息是im关心的)msg_group
- 表
(id、标识、类型和文件是我在此需要的)msg_attach
SELECT msg_group.message, msg_group.starts,
msg_group.expires,
GROUP_CONCAT(msg_attach.file SEPARATOR ',')
FROM `membership`
INNER JOIN `msg_group`
ON membership.group_id = msg_group.group_id
LEFT JOIN `msg_attach`
ON msg_group.id = msg_attach.ident AND msg_attach.type = "1"
WHERE membership.staff_id = "1"
AND msg_group.starts <= CURRENT_TIMESTAMP
AND msg_group.expires >= CURRENT_TIMESTAMP
ORDER BY msg_group.expires ASC LIMIT 0, 30
附加信息:
---------------------------------
| id | type | ident| file |
| 1 | 1 | 3 | corona.jpg |
| 2 | 1 | 3 | peroni.png |
---------------------------------
因此,我希望我的查询返回:
------------------------------------------------------------
| message | starts | expires | file |
| PIES | date1 | date2 | null |
| CAKES | date1 | date2 | null |
| BEERS | date1 | date2 | corona.jpg,peroni.png |
| POMMEGRANITES | date1 | date2 | null |
------------------------------------------------------------
我得到的是:
------------------------------------------------------------
| message | starts | expires | file |
| BEERS | date1 | date2 | corona.jpg,peroni.png |
------------------------------------------------------------
或者使用ISNULL:
------------------------------------------------------------------------------
| message | starts | expires | file |
| BEERS | date1 | date2 | null, corona.jpg,peroni.png, null, null |
------------------------------------------------------------------------------
这都是忽略了会员和用户的东西,我不/认为/是相关的问题。如果没有GROUP_CONCAT(即仅msg_attach.file),我将返回5行,两行用于啤酒,文件分别列出。简化的查询应如下所示
SELECT a.message, a.starts, a.expires,
GROUP_CONCAT(b.file) fileList
FROM msg_group a
LEFT JOIN msg_attach b
ON a.group_ID = b.type AND
a.id = b.ident
GROUP BY a.message, a.starts, a.expires
选择msg_group.message、msg_group.start、msg_group.expires、group_CONCAT(msg_attach.file)附件
来自味精集团
membership.group\u id=msg\u group.group\u id上的内部加入成员资格
左连接msg_group.id上的msg_attach=msg_attach.ident和msg_attach.type=“1”
其中membership.staff_id=“1”
和msg_group.start=当前_时间戳
GROUP BY msg_GROUP.expires、msg_GROUP.start、msg_GROUP.message
由msg_集团订购。过期ASC限额0,30
简化的查询应该是这样的
SELECT a.message, a.starts, a.expires,
GROUP_CONCAT(b.file) fileList
FROM msg_group a
LEFT JOIN msg_attach b
ON a.group_ID = b.type AND
a.id = b.ident
GROUP BY a.message, a.starts, a.expires
选择msg_group.message、msg_group.start、msg_group.expires、group_CONCAT(msg_attach.file)附件
来自味精集团
membership.group\u id=msg\u group.group\u id上的内部加入成员资格
左连接msg_group.id上的msg_attach=msg_attach.ident和msg_attach.type=“1”
其中membership.staff_id=“1”
和msg_group.start=当前_时间戳
GROUP BY msg_GROUP.expires、msg_GROUP.start、msg_GROUP.message
由msg_集团订购。过期ASC限额0,30
你能用你想要的输出显示数据吗?添加了示例表-不是相同的上下文,而是相同的情况。你能用你想要的输出显示数据吗?添加了示例表-不是相同的上下文,而是相同的情况。非常感谢JW-不得不做一些小改动,正如我在上面的帖子中编辑的那样-希望这样可以(我把它全部放在下面)。只是一个查询,GROUP BY做什么?我查看了mysql文档,但它似乎是一个聚合函数,没有解释GROUP BY实际做什么:)下面是关于GROUP BY
子句的完整文档GROUP_CONCAT
是一个聚合函数。非常感谢JW-我在上面的帖子中编辑了一些小改动-希望一切正常(我将其全部放在下面)。只是一个查询,GROUPBY做什么?我查看了mysql文档,但它似乎是一个聚合函数,没有解释GroupBy实际上做了什么:)下面是关于groupby
子句的完整文档<代码>组_CONCAT是一个聚合函数。
SELECT msg_group.message, msg_group.starts, msg_group.expires, GROUP_CONCAT(msg_attach.file) attachments
FROM msg_group
INNER JOIN membership ON membership.group_id = msg_group.group_id
LEFT JOIN msg_attach ON msg_group.id = msg_attach.ident AND msg_attach.type = "1"
WHERE membership.staff_id = "1"
AND msg_group.starts <= CURRENT_TIMESTAMP
AND msg_group.expires >= CURRENT_TIMESTAMP
GROUP BY msg_group.expires, msg_group.starts, msg_group.message
ORDER BY msg_group.expires ASC LIMIT 0, 30