我有一个问题似乎与之前发布的其他人相似,但这些问题的解决方案似乎并不适合我。
我想要做的是从一个数据库中选择与特定用户相关的行(在另一个数据库中找到),然后从第三个数据库中获取任何关联的附件,所以:
- 表
users
(id 是我们从中获取的全部内容) - 表
membership
(staff_id 和 group_id 是我需要的) - 表
msg_group
(id、starts、expires 和 message 是我关心的) - 表
msg_attach
(id、ident、type 和 file 是我需要的)
所以。我有这个查询:
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
它的问题是,应该返回 5 行。应该在 msg_attach.file 列中有“file.jpg,file2.jpg”。这很好,但是我应该在它下面还有 4 行,在 msg_attach 列中为 NULL。
为了解决这个问题,我尝试使用 IFNULL(msg_attach.file, 'null') 但是所有这些返回仍然是一行,但 file.jpg、file2.jpg、null、null、null、null。
我想要的是行女巫附件是file.jpg,file2.jpg,然后在该列中再有4行将“空”。
我希望我已经解释得足够清楚了!#
感谢您的任何帮助。亚历克斯
编辑:示例表和数据。
味精组:
------------------------------------------------------------
| id | group_id | message | starts | expires |
| 1 | 1 | PIES | date 1 | date 2 |
| 2 | 1 | CAKES | date 1 | date 2 |
| 3 | 1 | BEERS | date 1 | date 2 |
| 4 | 1 | POMMEGRANITES | date 1 | date 2 |
------------------------------------------------------------
msg_attach:
---------------------------------
| 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 行,其中只有 2 行用于 BEERS,文件单独列出。