2012-05-30 8 views
1

Сейчас у меня есть 3 таблицы, первая для пользователей, вторая для группы пользователей и третья для точек (и другие, если вы хотите один Я мог бы создать его для вас: P).Mysql: сумма значений таблицы в зависимости от разных видов деятельности

Таблица пользователей: user_id | fname | active

Таблица user_groups: id | group_id | user_id | active

Таблица user_points: id | point_type | point_units | active

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

Вот запрос, который я до сих пор:

SELECT 
    u.user_id AS `ID`, 
    u.fname AS `Name`, 
    SUM(case when up.point_type = 'Referrals' then up.point_units else 0 end) AS `Referrals`, 
    SUM(case when up.point_type = 'Email' then up.point_units else 0 end) AS `Email`, 
    SUM(case when up.point_type = 'Facebook' then up.point_units else 0 end) AS `Facebook`, 
    SUM(case when up.point_type = 'Twitter' then up.point_units else 0 end) AS `Twitter`, 
    SUM(case when up.point_type = 'Extra' then up.point_units else 0 end) AS `Extra`, 
    SUM(case when up.point_type = 'Discount' then up.point_units else 0 end) AS `Discount`, 
    SUM(case when u.user_id = up.user_id then up.point_units else 0 end) AS `Total` 
FROM users AS u, user_groups AS uc, user_points AS up 
WHERE u.user_id = uc.user_id 
    AND u.user_id = up.user_id 
    AND u.active = 1 
    AND uc.active = 1 
    AND up.active = 1 
    AND uc.group_id = up.group_id 
    AND uc.group_id = 65 
ORDER BY u.fname; 

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

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

Любые идеи? :-)

ответ

1

При использовании агрегатных функций вам понадобится GROUP BY. Ваш может выглядеть следующим образом:

GROUP BY u.user_id 

В запросе он будет здесь:

AND uc.group_id = 65 
GROUP BY u.user_id 
ORDER BY u.fname; 
+0

работал идеально, спасибо! – nomeacuerdo

Смежные вопросы