1

这是我想要完成的任务:从表“posts”中选择所有行,同时获取链接实体,例如作者(来自表“users”)和帖子所属类别的名称(来自表“categories”)。

到目前为止,这是我的两个查询:
这个获取帖子:

SELECT
posts.*
, users.authorName AS author
FROM posts
INNER JOIN users
ON users.id = posts.author

这个获取特定帖子的逗号分隔的类别列表:

SELECT
GROUP_CONCAT(categories.category) AS categories
FROM categories
INNER JOIN post_category
ON post_category.categoryID = categories.id
WHERE
post_category.postID = ?

这两个查询对自己的工作正常。

自然,当两者结合时,我不需要第二个查询的 WHERE 子句。我尝试将第二个查询用作第一个 SELECT 子句中的子查询,但它为所有帖子获取了一个逗号分隔的所有类别列表。我只想要我当前正在迭代的帖子的类别。

任何帮助将不胜感激,如果有任何不清楚的地方,我深表歉意 - 我很难思考,更不用说向其他人描述了;)

4

2 回答 2

2

像这样的东西:

SELECT posts.*, users.authorName AS author,
       GROUP_CONCAT(categories.category) AS categories
  FROM posts, users, categories, post_category
 WHERE users.id = posts.author
   AND post_category.categoryID = categories.id
   AND post_category.postID = posts.id
 GROUP BY posts.* /* list actual columns here */, author

还是我错过了什么?

于 2009-08-28T21:03:36.207 回答
1

我认为您的子查询方法应该可以正常工作,但是您仍然需要子查询中的 where 子句。MySQL 怎么知道要检索哪些行?尝试:

SELECT posts.*, users.authorName AS author,
    (SELECT GROUP_CONCAT(categories.category) 
     FROM categories
     INNER JOIN post_category ON post_category.categoryID = categories.id
     WHERE post_category.postID = posts.postID) AS categories
FROM posts
INNER JOIN users ON users.id = posts.author
于 2009-08-28T21:11:06.770 回答