这是我想要完成的事情: 从表“posts”中选择所有行,同时还提取链接的实体,例如作者(来自表“users”)和帖子所属类别的名称(来自表“类别”)。
到目前为止,这是我的两个问题:
这个帖子取了帖子:
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子句中的子查询,但是为所有帖子提取了逗号分隔的所有类别列表。我只想要我正在迭代的帖子的类别。
任何帮助都会非常感激,如果有任何不明确的地方我会道歉 - 这对我来说很难想到,更不用说向别人描述了;)
答案 0 :(得分: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
或者我错过了什么?
答案 1 :(得分: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