查询以在按类别链接时显示所有博客帖子

时间:2011-04-18 18:44:21

标签: php mysql sql database codeigniter

所以我有一个查询,应该在链接帖子类别和创建帖子的用户时从表中获取所有帖子。我得到的只是回复了一个帖子,而不是所有帖子。下面是架构:

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

2 个答案:

答案 0 :(得分:1)

在亚当罗宾逊的answer中提出类似的问题

  

因为您正在使用聚合   您的查询(GROUP_CONCAT),您的查询   正在分组。既然你没有   group by子句,你的小组是   整个结果集(因此看到每一个   作者使用的标签)。因为   MySQL允许使用非分组   您在分组语句中的列   没有错,但是你   没有得到你的查询   想。

     

为了找回正确的   结果,您需要对查询进行分组   在thread.id上。

在您的情况下,只需添加GROUP BY blgcategories.id即可

答案 1 :(得分:0)

我立即看到了两件事:

1 - 执行LEFT OUTER JOIN而不是RIGHTRIGHT表示“向我展示右表中的所有内容,无论左表中是否有任何匹配。”你需要blogposts的所有内容,所以请左转。

2 - 您的INNER JOIN也可能是一个问题。您确定users是否已完全填充?

修改

问题是您使用的是没有GROUP BY的聚合函数!取出GROUP_CONCAT()它应该可以正常工作。