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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Задачка

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]   [41-50]   [51-60]  ...    [61-66] 

 
 автор: oradev   (25.01.2013 в 10:34)   письмо автору
 
   для: Valick   (25.01.2013 в 10:16)
 

Sfinks & Valick хорош умничать, идея ясна.

  Ответить  
 
 автор: Valick   (25.01.2013 в 10:16)   письмо автору
 
   для: Sfinks   (25.01.2013 в 09:04)
 

Понять группировку всегда проще если ее отменить
а еще лучше её отменять поэтапно
GROUP BY if( substr( `descr`, 1, 5 )='Дог.№', 1, UUID() ), `user`, `descr` 

GROUP BY if( substr( `descr`, 1, 5 )='Дог.№', 1, UUID() ), `user`

GROUP BY if( substr( `descr`, 1, 5 )='Дог.№', 1, UUID() )

  Ответить  
 
 автор: Sfinks   (25.01.2013 в 09:04)   письмо автору
 
   для: oradev   (24.01.2013 в 21:26)
 

Понять группировку всегда проще если ее отменить. Выполните такой запрос, и все вопросы отпадут:
SELECT date_format( max(`date`), '%d.%m.%Y' )`date` 
     , if( substr( `descr`, 1, 5 )='Дог.№', 1, UUID() ) AS voobrazhaemoe_pole
     , `user` 
     , `descr` 
     , coalesce(sum(if( `type`='nal', `summ`, null )),'')`nal` 
     , coalesce(sum(if( `type`='beznal', `summ`, null )),'')`beznal` 
FROM `charge` 
WHERE `date` BETWEEN concat( CURDATE() -INTERVAL datediff( CURDATE(), '19700105' )%7 DAY, ' 00:00:00' ) 
                 AND concat( CURDATE() +INTERVAL 6-datediff( CURDATE(), '19700105' )%7 DAY, ' 23:59:59' ) 
ORDER BY `date`
т.е. ДА, вы правы, у всех договоров начинающихся с 'Дог.№' voobrazhaemoe_pole будет =1, но НЕТ, вы не правы, что сгруппируются договора с разными номерами, т.к. группировка происходит по трем полям одно из которых `descr`, а оно у договоров с разными номерами разное.

  Ответить  
 
 автор: oradev   (24.01.2013 в 21:26)   письмо автору
 
   для: Valick   (24.01.2013 в 20:47)
 

Валик, не буду помещать. Не хочу.

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

Нет ваш запрос не катит, он синтаксически ошибочен.

  Ответить  
 
 автор: Valick   (24.01.2013 в 20:47)   письмо автору
 
   для: oradev   (24.01.2013 в 20:29)
 

ну хотите присвойте ему alias например voobrazhaemoe_pole и даже в выборку его можете поместить наверно
SELECT date_format( max(`date`), '%d.%m.%Y' )`date`
     , `user`
     , `descr`
     , coalesce(sum(if( `type`='nal', `summ`, null )),'')`nal`
     , coalesce(sum(if( `type`='beznal', `summ`, null )),'')`beznal`
     , voobrazhaemoe_pole
FROM `charge`
WHERE `date` BETWEEN concat( CURDATE() -INTERVAL datediff( CURDATE(), '19700105' )%7 DAY, ' 00:00:00' )
                 AND concat( CURDATE() +INTERVAL 6-datediff( CURDATE(), '19700105' )%7 DAY, ' 23:59:59' )
GROUP BY if( substr( `descr`, 1, 5 )='Дог.№', 1, UUID() ) AS voobrazhaemoe_pole, `user`, `descr`
ORDER BY `date`

  Ответить  
 
 автор: oradev   (24.01.2013 в 20:29)   письмо автору
 
   для: Valick   (24.01.2013 в 20:27)
 

Какое еще воображаемое поле ?

  Ответить  
 
 автор: Valick   (24.01.2013 в 20:27)   письмо автору
 
   для: oradev   (24.01.2013 в 20:15)
 

нет, формируется воображаемое поле, которое для строк с договорами принимает значение 1, а для остальных уникальный UUID

  Ответить  
 
 автор: oradev   (24.01.2013 в 20:15)   письмо автору
 
   для: Valick   (24.01.2013 в 18:44)
 

Валик, что мне ваши слова на веру принимать что ли, извините, жизнь отучила, а где вы видите, что группировка будет по номерам договоров, я такого не вижу, а лишь вижу, что при определенном условии ( я писал выше) будет группировка по дате, на это указывает явно запись

GROUP BY 1


Учитывая

SELECT date_format( max(`date`), '%d.%m.%Y' )`date` 

  Ответить  
 
 автор: Valick   (24.01.2013 в 18:44)   письмо автору
 
   для: oradev   (24.01.2013 в 17:08)
 

опять вы спорите :)
запрос выберет для группировки все строки в которых встречается Дог.№
но группировка будет проходить не вся в куче, а именно по номерам договоров, т.е. Дог.№24 ну никак не сгруппируется с Дог.№25

  Ответить  
 
 автор: oradev   (24.01.2013 в 17:08)   письмо автору
 
   для: Valick   (24.01.2013 в 13:12)
 

ничего подобного

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]   [41-50]   [51-60]  ...    [61-66] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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