Подсчет строк в столбце JOINed без влияния на возвращаемые строки? - PullRequest
1 голос
/ 24 июня 2010

Немного сложно представить мою проблему в краткой форме, поэтому я прошу прощения, если название не имеет смысла.

В любом случае, вот проблема:

 $query = '
  SELECT issues.*, comments.author AS commentauthor, favorites.userid AS favorited FROM issues
  LEFT JOIN comments ON comments.issue = issues.id AND comments.when_posted = issues.when_updated
  LEFT JOIN favorites ON favorites.ticketid = issues.id AND favorites.userid = \'' . $_SESSION['uid'] . '\'
  ' . $whereclause . '
  ORDER BY issues.when_updated ' . $order;

Не обращайте внимания на тот факт, что это PHP, поскольку я не запрашиваю помощь PHP.

Запрос извлекает группу issues, и я хочу получить количество строк favorites, у которых favorites.ticketid соответствует issues.id. Я использую LEFT JOIN favorites не для того, чтобы получить то, что я только что упомянул, а для того, чтобы понять, одобрил ли клиент проблему, то есть часть favorites.userid AS favorited.

Я попытался сделать следующее: (все сразу, я помещаю это в маркированную форму для удобства чтения)

  • дублирование существующего LEFT JOIN favorites и удаление проверки идентификатора пользователя из дубликата
  • добавление , COUNT(favorites.ticketid) AS favoritescount в раздел SELECT
  • добавление AS favorited к исходному LEFT JOIN, а также изменение favorites.userid на favorited.userid

С этой попыткой мой запрос возвращает только одну строку.

1 Ответ

0 голосов
/ 24 июня 2010
SELECT issues.*,
       comments.author AS commentauthor,
       favorites.userid AS favorited,
       (
           SELECT COUNT(favorites.id)
           FROM favorites
           WHERE ticketid = issues.id
       ) AS numfavorites
FROM issues
LEFT JOIN comments
    ON comments.issue = issues.id
    AND comments.when_posted = issues.when_updated
LEFT JOIN favorites
    ON favorites.ticketid = issues.id
    AND favorites.userid = ?uid

Это должно работать, я просто использую подзапрос, чтобы получить количество избранных

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