Как я могу присоединиться к этим двум запросам? - PullRequest
1 голос
/ 29 августа 2009

Вот что я хочу сделать: Выделите все строки из таблицы «сообщения», а также извлекайте связанные объекты, такие как автор (из таблицы «пользователи») и названия категорий, к которым принадлежит сообщение (из таблицы «категории»).

Пока это два моих запроса:
Этот выбирает сообщения:

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

А этот список разделенных запятыми категорий для определенного сообщения:

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

Два запроса самостоятельно работают нормально.

Естественно, когда они объединены, мне не понадобится предложение WHERE для второго запроса. Я попытался использовать второй запрос в качестве подзапроса в предложении SELECT первого, но он выбрал разделенный запятыми список ВСЕХ категорий для ВСЕХ сообщений. Мне нужны только категории для сообщения, которое я сейчас перебираю.

Любая помощь будет принята с благодарностью, и я прошу прощения, если что-то из этого неясно - мне достаточно сложно подумать, не говоря уже о том, чтобы описать другим людям;)

Ответы [ 2 ]

2 голосов
/ 29 августа 2009

Примерно так:

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 голос
/ 29 августа 2009

Я думаю, что ваш подход к подзапросу должен работать нормально, но вам все еще нужен пункт 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...