Php 在类别中链接时显示所有博客文章的查询

Php 在类别中链接时显示所有博客文章的查询,php,mysql,sql,database,codeigniter,Php,Mysql,Sql,Database,Codeigniter,因此,我有一个查询,在链接帖子类别和创建帖子的用户时,应该从表中获取所有帖子。不过我得到的只是一篇回复的帖子,而不是所有的帖子。以下是模式: Posts ===== id Categories ========== id Post categories =============== postID categoryID 这是我到目前为止的SQL代码,有点深,但它将所有类别连接到一个字段中 SELECT blgpostcategories.*, blgcategories.i

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

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更新的查询-仍然只返回一行:-(


我一眼就能看出两件事:

1-执行
左外部联接
而不是
右意味着“显示右表中的所有内容,无论左表中是否有匹配的内容。”如果您想要
博客帖子中的所有内容,请执行左

2-您的
内部连接也可能是一个问题。您确定
用户
已完全填充吗

编辑:

问题是您使用的聚合函数没有
分组依据
!取出
分组依据()
,它应该可以正常工作。

在Adam Robinson对类似问题的回答中

因为您在中使用了聚合 您的查询(分组),您的查询 正在分组。因为您没有 GROUPBY子句,您的组是 整个结果集(因此可以看到每个 作者使用的标签)。因为 MySQL允许使用非分组的 分组语句中的列,您可以 没有错误,但是你 没有得到你想要的查询 需要

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


在您的情况下,只需按blgcategories添加
组。id
应该这样做

不确定,我认为这是一种方法。我应该尝试内部连接吗?我绝对肯定用户已被填充。我添加了一个答案。我想您需要
左连接。请参阅我上面编辑的查询。对于此查询内容仍然感到非常不满意:-(@Nathan-如果你从博客帖子中选择一个
SELECT*,
你得到了多少行?@JNK返回了2行…我想这与我的整个类别的合并等有关。嗯…@Nathan-请看我的编辑。当你使用没有
分组依据的聚合时,你会得到有趣的结果。大多数数据库都不允许你这样做,但是MySQL是…@JNK我该如何获取每篇文章可以驻留的多个类别?我正在使用GROUP_CONCAT()获取一行中的所有类别,而不重复我的文章数据。这样做了!主要区别是我按blgposts.id进行了分组
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