1

達成したいことは次のとおりです。作成者(テーブル「users」から)や投稿が属するカテゴリの名前(テーブル「categories」から)などのリンクされたエンティティもフェッチしながら、テーブル「posts」からすべての行を選択します。

これまでの私の2つのクエリは次のとおりです。
これは投稿を取得します。

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 = ?

2つのクエリ自体は正常に機能します。

当然、この2つを組み合わせると、2番目のクエリのWHERE句は必要ありません。2番目のクエリを最初のクエリの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 に答える