|
|
|
| Есть таблица пользователей users c полями id и name.
Есть таблица операций trans:
|user| type |summa
-------------------------
|1 |bonus |100
|2 |bonus |100
|1 |bonus |100
|1 |bonus |50
|1 |fine |150
Никак не могу придумать оптимальный запрос, чтобы сделать следующее:
Вывести список пользователей, в котором помимо полей из таблицы users будет ещё два поля: bonus и fine, в которых будет содержаться сумма всех бонусов и штрафов пользователя.
То, что я хочу, можно реализовать тремя запросами:
SELECT * FROM `users`
SELECT SUM(summa) FROM `trans` WHERE `user` = 'ID_ПОЛЬЗОВАТЕЛЯ' AND `type` = 'bonus'
SELECT SUM(summa) FROM `trans` WHERE `user` = 'ID_ПОЛЬЗОВАТЕЛЯ' AND `type` = 'fine'
|
Но, загонять запрос в цикл очень не хочется, да и пользователей может быть много.
На примере данных таблиц в результате должно вывестись:
|id|name|bonus|fine
|1| test |250 |150
|2|demo |100 |0 | |
|
|
|
|
|
|
|
для: itica
(10.06.2012 в 00:09)
| | Как-то так:
SELECT U.*,
sum(if(type='bonus',summa,0))bonus,
sum(if(type='fine',summa,0))fine
FROM users U
JOIN trans ON id=user
GROUP BY id, name
|
| |
|
|
|