Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка по двум условиям из дополнительной таблицы
 
 автор: itica   (10.06.2012 в 00:09)   письмо автору
 
 

Есть таблица пользователей 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

  Ответить  
 
 автор: Sfinks   (10.06.2012 в 00:45)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования