我有以下表格:
Post (id, title, author_id) etc
Tags
Post_tags
Author
以下sql查询似乎只获得第一个线程,以及 all 标记。
SELECT post. * , author.username,
GROUP_CONCAT( DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',' ) AS tags
FROM author, post
JOIN post_tags ON post.id = post_tags.thread_id
JOIN tag ON post_tags.tag_id = tag.id
WHERE author.id = post.author_id
我在这里做错了什么?
答案 0 :(得分:4)
您通常将GROUP_CONCAT()
与GROUP BY
子句一起使用。
没有GROUP BY
,这意味着它会将所有行分组为一个,从而显示所有标记的组连接。
您看到的第一个线程数据是MyQSL错误行为的副产品,它允许您在SELECT中显示不依赖于分组字段的字段(在您的情况下没有)。
尝试在最后添加GROUP BY post.id
的查询。
SELECT post. *
, author.username
, GROUP_CONCAT( DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',' )
AS tags
FROM author
JOIN post
ON author.id = post.author_id
JOIN post_tags
ON post.id = post_tags.thread_id
JOIN tag
ON post_tags.tag_id = tag.id
GROUP BY post.id