ПРИСОЕДИНЯЙТЕСЬ к MYSQL с Count или Sum - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выполнить запрос с объединением.Если я использую 'nil' в качестве numcomments, я получаю все истории, но если я пытаюсь сосчитать их с COUNT, это ограничивает истории только историями с комментариями.Я хочу вернуть все истории, но дать ноль, если счет равен нулю

Вот схема

//stories
id|story
1|Microsoft Announces Earnings
2|Apple Inks Content Deal
3|Google In Talks With Nissan
4|Netflix Greenlights Series

//comments
id|storyid|comment
1|1|Not what I would have expected
2|1|Look at numbers for Azure
3|1|I called this
4|3|Who cares

Here is the query:
This only returns the stories with commments ie stories 1 and 3

$sql = "
SELECT COUNT(c.comment) numcomments
     , s.story event
     , s.id
     , c.storyid   
  FROM stories s
  LEFT 
  JOIN comments c
    ON c.storyid = s.id 
";

//this returns all the stories but does not give me a count of comments for obvious reasons

$sql = "
SELECT 'nil' numcomments
     , s.story event
     , s.id
     , c.storyid   
  FROM stories s
  LEFT 
  JOIN comments c
    ON c.storyid = s.id 
";

Как я могу получить все истории, но если неткомментарии просто получают ноль в счетчике или numcomments поле

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

агрегатной функции требуется group by, которая пропущена в вашем 1-м запросе

SELECT COUNT(c.comment) as `numcomments`,s.story as event,s.id,c.storyid   
FROM `stories` s
LEFT JOIN comments `c` ON 
c.storyid = s.id  group by s.story ,s.id,c.storyid 

И во втором запросе, который вы делаете, есть какая-либо агрегатная count() функция, поэтому ее нормальное значение не отображается:

0 голосов
/ 12 февраля 2019

Вам всегда нужно группировать по столбцам, которые не агрегируются.

Попробуйте это

$sql = "
SELECT COUNT(c.comment) numcomments
     , s.story event
     , s.id
     , c.storyid   
  FROM stories s
  LEFT 
  JOIN comments c
   ON c.storyid = s.id 
Group by 
s.story 
     , s.id
     , c.storyid
";
0 голосов
/ 12 февраля 2019

Попробуйте следующий запрос:

SELECT s.id, s.story, count(c.id) as NumOfComments 
FROM stories s LEFT JOIN comments ON  s.id=c.storyid 
GROUP BY s.id, s.story
...