MYSQL возвращает количество людей, зарегистрировавших событие - PullRequest
0 голосов
/ 13 ноября 2018

https://imgur.com/O1v3O8w

На приведенном выше изображении показана моя первая таблица с именем events.

https://imgur.com/7Hbsitl

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

Это использованный файл sql:

SELECT event.`eventid`,
       event.`name`,
       `eventtime`,
       `location`,
       `datecreated`,
       `dateofevent`,
       `categoryname`,
       `description`,
       Count(participantlogs.eventid)
FROM   event,
       recreationalcategory,
       participantlogs
WHERE  recreationalcategory.categoryid = event.categoryid
       AND participantlogs.eventid = event.eventid
GROUP  BY event.eventid 

Любая помощь будет принята с благодарностью.!

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Левое соединение должно делать вашу работу.

SELECT event.`eventid`,
       event.`name`,
       `eventtime`,
       `location`,
       `datecreated`,
       `dateofevent`,
       `categoryname`,
       `description`,
       Count(participantlogs.eventid)
FROM   event,
       recreationalcategory,
       participantlogs
WHERE  (recreationalcategory.categoryid = event.categoryid OR recreationalcategory.categoryid  is null)
       AND participantlogs.eventid = event.eventid
GROUP  BY event.eventid

просто используйте left join

SELECT event.`eventid`,
           event.`name`,
           `eventtime`,
           `location`,
           `datecreated`,
           `dateofevent`,
           `categoryname`,
           `description`,
           Count(participantlogs.eventid)
     FROM   event 
     left join recreationalcategory 
       on recreationalcategory.categoryid = event.categoryid
     join participantlo on
       on participantlogs.eventid = event.eventid
    GROUP  BY event.eventid
0 голосов
/ 13 ноября 2018

Отключите синтаксис запятой старой школы для операции соединения и вместо этого используйте ключевое слово JOIN, переместите предикаты объединения в предложение ON.Ключевое слово JOIN можно изменить на ключевое слово LEFT или RIGHT, чтобы разрешить внешнее объединение.

внешнее объединение вернет строки, которые нене совпадать;точно описанный вариант использования.

SELECT e.eventid
     , e.name
     , COUNT(p.eventid)
  FROM event e
  LEFT
  JOIN recreationalcategory c
    ON c.categoryid = e.categoryid
  LEFT
  JOIN participantlogs p
    ON p.eventid = e.eventid
 GROUP
    BY e.eventid
     , e.name

Другой альтернативой может быть использование коррелированного подзапроса в списке SELECT, а не объединение.Предполагая, что eventid является ПЕРВИЧНЫМ КЛЮЧОМ или УНИКАЛЬНЫМ КЛЮЧОМ в таблице event, мы можем исключить условие GROUP BY ...

SELECT e.eventid
     , e.name
     , ( SELECT COUNT(1)
           FROM participantlogs p
          WHERE p.eventid = e.eventid
       ) AS cnt
  FROM event e
  LEFT
  JOIN recreationalcategory c
    ON c.categoryid = e.categoryid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...