所以我有一个查询,应该在链接帖子类别和创建帖子的用户时从表中获取所有帖子。我得到的只是回复了一个帖子,而不是所有帖子。下面是架构:
Posts
=====
id
Categories
==========
id
Post categories
===============
postID
categoryID
这是我到目前为止的SQL代码,有点深,但它将所有类别连接成一个字段。
SELECT
blgpostcategories.*,
blgcategories.id,
GROUP_CONCAT(blgcategories.name) AS categories,
blgposts.*,
users.firstName,
users.id AS usersId,
users.lastName,
users.email
FROM blgposts
RIGHT OUTER JOIN blgpostcategories
ON blgposts.id = blgpostcategories.postID
RIGHT OUTER JOIN blgcategories
ON blgpostcategories.categoryID = blgcategories.id
INNER JOIN users
ON blgposts.userID = users.id
来自JNK的更新查询 - 仍然只返回一行: - (
SELECT
blgpostcategories.*,
blgcategories.id,
GROUP_CONCAT(blgcategories.name) AS categories,
blgposts.*
FROM blgposts
LEFT OUTER JOIN blgpostcategories
ON blgposts.id = blgpostcategories.postID
LEFT OUTER JOIN blgcategories
ON blgpostcategories.categoryID = blgcategories.id
答案 0 :(得分:1)
在亚当罗宾逊的answer中提出类似的问题
因为您正在使用聚合 您的查询(GROUP_CONCAT),您的查询 正在分组。既然你没有 group by子句,你的小组是 整个结果集(因此看到每一个 作者使用的标签)。因为 MySQL允许使用非分组 您在分组语句中的列 没有错,但是你 没有得到你的查询 想。
为了找回正确的 结果,您需要对查询进行分组 在thread.id上。
在您的情况下,只需添加GROUP BY blgcategories.id
即可
答案 1 :(得分:0)
我立即看到了两件事:
1 - 执行LEFT OUTER JOIN
而不是RIGHT
。 RIGHT
表示“向我展示右表中的所有内容,无论左表中是否有任何匹配。”你需要blogposts
的所有内容,所以请左转。
2 - 您的INNER JOIN
也可能是一个问题。您确定users
是否已完全填充?
修改强>
问题是您使用的是没有GROUP BY
的聚合函数!取出GROUP_CONCAT()
它应该可以正常工作。