Как написать SQL Select Query для этой проблемы? - PullRequest
1 голос
/ 20 марта 2011

У меня есть четыре таблицы: группы, пользователи, голоса, следующие.

Структуры этих таблиц:

групп

g_id      g_title      g_content
 1          t1         content1   
 2          t2         content2

пользователей

u_id      u_groupid
 1         1
 2         1
 3         2
 4         2
 5         2

голосов

v_id      v_userid      v_groupid      v_votes
 1         1             1              1
 2         1             2              1
 3         2             2              1
 4         3             2              1
 5         3             1              1

следует

f_id      f_userid      f_groupid
 1         1             1
 2         2             1
 3         2             2
 4         3             1
 5         3             2

В таблице групп записывается основная информация о «группе».

Таблица пользователей сохраняет связь между пользователями и группами, то есть, если пользователь A принадлежит к группам B, в таблице пользователей будет запись.

Таблица голосов означаетподдерживающее отношение пользователя к группе.

Если пользователь A интересуется группой A, добавьте запись в таблицу Follows.

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

Я хочурезультат запроса нравится это

g_id      num_users      unm_votes      num_followers    
 1           2              2                3
 2           3              3                2

Кстати, моя база данных Mysql 5.0.51b.

Ответы [ 2 ]

3 голосов
/ 20 марта 2011

Если вы хотите в 1 запросе, что-то вроде этого поможет вам

SELECT g_id, 
       d1.num_users, 
       d2.unm_votes, 
       d3.num_followers 
FROM   groups gg 
       LEFT JOIN (SELECT g_id, 
                         COUNT(u.u_id) AS num_users 
                  FROM   groups g 
                         LEFT JOIN users u 
                           ON u.u_groupid = g.g_id 
                  GROUP  BY g_id) d1 
         ON d1.g_id = gg.g_id 
       LEFT JOIN (SELECT g_id, 
                         COUNT(v.v_userid) AS unm_votes 
                  FROM   groups g 
                         LEFT JOIN votes v 
                           ON v.v_groupid = g.g_id 
                  GROUP  BY g_id) d2 
         ON d2.g_id = gg.g_id 
       LEFT JOIN (SELECT g_id, 
                         COUNT(f.f_userid) AS num_followers 
                  FROM   groups g 
                         LEFT JOIN follows f 
                           ON f.f_groupid = g.g_id 
                  GROUP  BY g_id) d3 
         ON d3.g_id = gg.g_id 
GROUP  BY gg.g_id 
0 голосов
/ 20 марта 2011

Для подсчета пользователей по группам:

select g_id,count(u.uid) user_count  from groups g, users u 
where u.groupid = g.g_id
group by g_id

Может захотеть прочитать о группе по.

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