Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
не получается запрос (Дмитрий) 04/10/2012 - 15:04:48
      Re: не получается запрос (Дмитрий) 04/10/2012 - 16:01:23



From: Дмитрий - 04/10/2012 - 15:04:48
Subject:не получается запрос
-----------------
Здравствуйте. Вопрос на 33 засыпки.

Есть 2 таблицы.
1. giftcards (gc_order_id - autoincrement, primary)
2. giftcards_order (gc_card_id (ai,primary), gc_order_id, gc_value (ENUM 500,1000,3000,5000)

Задача.
Это понятно упрощенно. Там есть еще поля.
Задача: Выбрать из giftcards все записи и посчитать количество записей из второй таблицы для каждого из существующих gc_value
соотнося их по gc_order_id

То есть во второй таблице может быть такие данные
1;1;500
2;1;500
3;1;1000
4;1;3000
5;1;5000
6;1;3000

Должно получиться что то вида
gc_order_id(1),count_value_500(2),count_value_1000(1),count_value_3000(2),count_value_5000(1)

Делаю вот такой вот финт ушами:
SELECT g.gc_order_id,
COUNT(o500.gc_order_id) as num_gc500,
COUNT(o1000.gc_order_id) as num_gc1000,
COUNT(o3000.gc_order_id) as num_gc3000,
COUNT(o5000.gc_order_id) as num_gc5000
FROM (giftcards AS g)
LEFT JOIN (giftcards_orders AS o500)
ON (o500.gc_order_id=g.gc_order_id
AND o500.gc_value='500')
LEFT JOIN (giftcards_orders AS o1000)
ON (o1000.gc_order_id=g.gc_order_id
AND o1000.gc_value='1000')
LEFT JOIN (giftcards_orders AS o3000)
ON (o3000.gc_order_id=g.gc_order_id
AND o3000.gc_value='3000')
LEFT JOIN (giftcards_orders AS o5000)
ON (o5000.gc_value='5000'
AND o5000.gc_order_id=g.gc_order_id)

GROUP BY gc_order_id

И оно не работает. Точнее работает, но не так как нужно:
Если в таблице по определенному value нет записей - то пишет как и нужно 0, если только один тип value (например 1000) - то считает нормально, остальное 0 ставит. А вот если несколько разных типов - то начинается феерический писец и я даже логику его подсчетов не могу понять.
например array (size=10)
0 => string '5' (length=1)
'id' => string '5' (length=1)
1 => string '10' (length=2)
'num_gc500' => string '10' (length=2)
2 => string '10' (length=2)
'num_gc1000' => string '10' (length=2)
3 => string '0' (length=1)
'num_gc3000' => string '0' (length=1)
4 => string '10' (length=2)
'num_gc5000' => string '10' (length=2)при значениях 500(1), 1000(2), 5000(5) оно выдает


Вобщем как сделать то?



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
41705



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |