Запрос, чтобы показать все сообщения в блоге при размещении ссылок в категориях - PullRequest
0 голосов
/ 18 апреля 2011

Итак, у меня есть запрос, который должен получить все сообщения из таблицы, связывая категории сообщений и пользователя, который создал сообщение.Я получаю только одно возвращенное сообщение, а не все сообщения.Ниже приведена схема:

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

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

В ответе Адама Робинсона на аналогичный вопрос

Поскольку вы используете агрегат в ваш запрос (GROUP_CONCAT), ваш запрос группируется. Так как у вас нет группа по предложению, ваша группа является весь набор результатов (следовательно, видя каждый тег, который использовал автор). Так как MySQL позволяет использовать не сгруппированные столбцы в сгруппированных вы не получаю ошибку, но вы не получают запрос, который вы хочу.

Для того, чтобы получить надлежащее результаты, вам нужно сгруппировать ваш запрос на thread.id.

В вашем случае добавление GROUP BY blgcategories.id должно сделать это

0 голосов
/ 18 апреля 2011

Две вещи, которые я вижу сразу:

1 - Делать LEFT OUTER JOIN не RIGHT. RIGHT означает «показать мне все вещи в правой таблице, независимо от того, есть ли у меня что-нибудь соответствующее в левой таблице». Вы хотите все от blogposts, поэтому сделайте налево.

2 - Ваш INNER JOIN также может быть проблемой. Вы уверены, что users заполнен полностью?

EDIT:

Проблема в том, что вы используете агрегатную функцию без GROUP BY! Выньте GROUP_CONCAT(), и оно должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...