表和注解栏:
图片,标签,图片标签
pictures.id
pictures.created_date
tags.id
picture_tags.tag_id
picture_tags.picture_id
我有以下使用连接表的查询:
SELECT pictures.*, pictures.id as picture_id, tags.id as tag_id
FROM picture_tags
LEFT JOIN pictures ON pictures.id = picture_tags.picture_id
LEFT JOIN tags ON tags.id = picture_tags.tag_id
WHERE picture_tags.tag_id IN (1, 2)
GROUP BY pictures.id, tags.id
ORDER BY pictures.created_date ASC;
由于一张图片可以有多个标签,这可能会多次返回相同的picture.id。有没有办法防止这种情况,使picture.ids只显示一次?
它现在是这样返回的:
id | created_date | picture_id | tag_id
1 | 2022-12-08 19:04:23 | 1 | 1
1 | 2022-12-08 19:04:23 | 1 | 2
2 | 2022-12-09 00:46:30 | 2 | 3
型
我理想的回报应该是这样的:
picture.created_date | picture.id | tagIds
2022-12-08 19:04:23 | 1 | [ 1, 2 ]
2022-12-09 00:46:30 | 2 | [3]
1条答案
按热度按时间d5vmydt91#
正如我在评论中所说的,在像这样组合行之前,您需要仔细考虑。但是如果您真的想这样做,您可以这样做:
注:我将
LEFT JOIN
转换为INNER JOIN
。在原始查询中,第一个连接作为LEFT JOIN没有意义(所有字段都是NULL),而第二个连接由于WHERE子句而实际上是INNER JOIN。此外,由于我们实际上没有使用tag
表中的任何字段,我能够完全删除该连接。