This question already has answers here:
Can I concatenate multiple MySQL rows into one field?
(11个答案)
4年前关闭。
我有一个博客文章表和一个博客文章标签表。一篇文章有很多标签。首先,我先调用帖子,然后循环并调用标签表,但这导致每页9个查询仅用于获取帖子。我将其重写为使用联接,但是它返回重复的博客文章行。
该查询返回我想要的数据,但是如果每个帖子有5个标签,则每个帖子将重复5次,只有标签字段不同。我不能使用GROUP BY,因为这将为每个帖子返回1行,带有1个标签,并断开一对多的连接。
有没有一种方法可以为多次联接返回一个数组,这样我就只能为帖子获得1行,然后tag列是一个数组或逗号分隔的字符串供我使用,而不必过滤掉所有重复的数据。
可能需要根据您的表结构进行少量更改
(11个答案)
4年前关闭。
我有一个博客文章表和一个博客文章标签表。一篇文章有很多标签。首先,我先调用帖子,然后循环并调用标签表,但这导致每页9个查询仅用于获取帖子。我将其重写为使用联接,但是它返回重复的博客文章行。
SELECT p.timestamp
, p.title
, p.postcontent
, p.siteid
, t.tag
FROM user_blogposts p
LEFT
JOIN user_blogposttags t
ON t.postid = p.id
WHERE p.userid = 1
LIMIT 8
该查询返回我想要的数据,但是如果每个帖子有5个标签,则每个帖子将重复5次,只有标签字段不同。我不能使用GROUP BY,因为这将为每个帖子返回1行,带有1个标签,并断开一对多的连接。
有没有一种方法可以为多次联接返回一个数组,这样我就只能为帖子获得1行,然后tag列是一个数组或逗号分隔的字符串供我使用,而不必过滤掉所有重复的数据。
最佳答案
该查询将为您工作:
SELECT user_blogposts.*, (SELECT GROUP_CONCAT(tag) FROM user_blogposttags WHERE user_blogposttags.postid=user_blogposts.id) AS tags
FROM user_blogposts
可能需要根据您的表结构进行少量更改
关于php - 如何防止SQL结果为1到2的重复行而不会丢失数据[duplicate],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34855015/