2011-04-18 57 views
0

所以我有一个查询,应该从一个表中获取所有帖子,同时链接帖子类别和创建帖子的用户。我所得到的只是一篇文章,并非所有文章。架构如下:查询显示所有的博客文章,而在类别链接

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

不知道,我认为这是接近它的方式。我应该尝试内部连接吗?我绝对有积极的用户人口。 – 2011-04-18 18:50:33

+0

我加了一个答案。我想你想要一个'LEFT JOIN'。 – JNK 2011-04-18 18:51:46

回答

1

answer亚当·罗宾逊类似的问题

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

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

在你的情况下,只需添加GROUP BY blgcategories.id应该这样做

+0

这样做了!主要区别是我做了GROUP BY blgposts.id – 2011-04-18 19:20:39

0

两件事情我看到了蝙蝠的权利:

1 -做一个LEFT OUTER JOIN不是RIGHTRIGHT的意思是“向我展示所有的东西在右边的桌子上,不管我是否在左边的桌子上有任何匹配的东西。”你想从blogposts得到所有东西,所以做一个左边的动画。

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

编辑:

的问题是,您使用的是聚合函数没有GROUP BY!拿出GROUP_CONCAT(),它应该很好。

+0

看到我上面编辑的查询。仍然觉得这个查询的东西非常n00bish :-( – 2011-04-18 18:58:47

+0

@Nathan - 如果你做一个'SELECT * FROM Blogposts'你会得到多少行? – JNK 2011-04-18 19:00:06

+0

@JNK返回2行...我认为它有一些事情要做与整个加入我的类别等嗯... – 2011-04-18 19:01:52

相关问题