Справка по SQL-запросу для суммирования количества строк в зависимости от параметра в другой таблице - PullRequest
0 голосов
/ 23 июля 2011

Имеются две таблицы:

mark_notifications

mark_notifications_options

Таблица mark_notifications содержит строки данных, которыевключите столбец tid и идентификатор пользователя

Таблица mark_notifications_options содержит специальный столбец grouptobly

Чего я пытаюсь достичьзаключается в том, что если значение mark_notifications_options.grouptogether идентификатора пользователя установлено равным 0 , оно добавит каждую строку, соответствующую его идентификатору пользователя в таблице mark_notifications

Однако, если идентификатор пользователя mark_notifications_options.Значение grouptogether установлено в 1 , оно будет складывать каждую строку, соответствующую его идентификатору пользователя, где сгруппированы все приливы, так что если там, сколько бы раз ни появлялось одно и то же значение приливов, оно будет считаться только как 1.Я также хотел бы посчитать времена tid = 0 как отдельное право (но НЕ сгруппировано), а затем я просто добавил бы значения позже в php.

Это то, что я придумал до сих пор, но результирующие значения не имеют никакого смысла вообще, я получаю результаты, которые исчисляются тысячами (когда это должно быть небольшое число, например, 8).

SELECT 
         mark_notifications_options.grouptogether,
         COUNT(mark_notifications.threadid) AS ungrouped, 
         SUM(mark_notifications.threadid = 0) AS total_zero, 
         COUNT(DISTINCT mark_notifications.threadid) AS grouped 
    FROM mark_notifications, mark_notifications_options
   WHERE mark_notifications.userid = $userid
GROUP BY mark_notifications_options.grouptogether

Спасибо !!!

1 Ответ

0 голосов
/ 23 июля 2011

Вы пропустили предикат соединения и получили декартово произведение (т. Е. В результате было получено n x n строк).
Попробуйте это:

SELECT 
         mark_notifications_options.grouptogether,
         COUNT(mark_notifications.threadid) AS ungrouped, 
         SUM(mark_notifications.threadid = 0) AS total_zero, 
         COUNT(DISTINCT mark_notifications.threadid) AS grouped 
    FROM mark_notifications mark_notifications
    LEFT JOIN mark_notifications_options mark_notifications_options on mark_notifications_options.userid = mark_notifications.userid
   WHERE mark_notifications.userid = $userid
GROUP BY mark_notifications_options.grouptogether
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...