【问题标题】:Query to show all blog posts while linking in categories查询以在类别中链接时显示所有博客文章
【发布时间】:2011-04-18 18:44:21
【问题描述】:

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

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

【问题讨论】:

  • 不确定,我认为这是处理它的方法。我应该尝试内部连接吗?我绝对是积极的用户。
  • 我添加了一个答案。我想你想要一个LEFT JOIN

标签: php mysql sql database codeigniter


【解决方案1】:

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

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

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

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

【讨论】:

  • 做到了!主要区别是我做了 GROUP BY blgposts.id
【解决方案2】:

我马上就看到了两件事:

1 - 使用LEFT OUTER JOIN 而不是RIGHTRIGHT 的意思是“让我看看右表中的所有东西,不管我在左表中是否有任何匹配的东西。”你想要来自blogposts 的所有东西,所以左转。

2 - 您的INNER JOIN 也可能是个问题。您确定users 已填满吗?

编辑:

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

【讨论】:

  • 查看我上面编辑过的查询。仍然对这个查询内容感到非常不满意:-(
  • @Nathan - 如果你执行SELECT * FROM Blogposts,你会得到多少行?
  • @JNK 返回 2 行...我认为这与我的类别的整体加入等有关。嗯...
  • @nathan - 查看我的编辑。当您使用没有GROUP BY 的聚合时,您会得到有趣的结果。大多数数据库不会让你这样做,但 MySQL 会......
  • @JNK 我将如何获得每个帖子可以驻留的多个类别?我正在使用 GROUP_CONCAT() 将所有类别放在一行中,而无需重复我的帖子数据。
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2021-07-11
相关资源
最近更新 更多