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

Форум MySQL

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

 

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

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

тема: Сгруппировать возвращаемые записи по дате
 
 автор: OLi   (01.02.2012 в 19:06)   письмо автору
 
 

Подскажите как в запросе сгруппироват данные по дате (формат UNIX в секундах), так, чтобы сначала вывелись записи за 2011 год потом за 2012 год и тд...
И такой формат вывода:

2011
------
------
-----
2012
----
------

  Ответить  
 
 автор: cheops   (01.02.2012 в 21:46)   письмо автору
 
   для: OLi   (01.02.2012 в 19:06)
 

Придется преобразовать дату в календарный тип при помощи функции FROM_UNIXTIME(), а затем применить к ней функцию YEAR(). По этому полю можно будет осуществить группировку.

  Ответить  
 
 автор: OLi   (01.02.2012 в 21:49)   письмо автору
 
   для: cheops   (01.02.2012 в 21:46)
 

Можно пример простой?

  Ответить  
 
 автор: OLi   (01.02.2012 в 21:53)   письмо автору
 
   для: OLi   (01.02.2012 в 21:49)
 

У каждой записи есть свой год, т-е для 40 записей массив дат может быть таков:
2011 2011 2011 2011 2012 2012 и тд
Может это реализовать как-то на php? В цикле, определить если дата не повторяется (первое вхождение новой даты 2012)

  Ответить  
 
 автор: cheops   (01.02.2012 в 22:27)   письмо автору
 
   для: OLi   (01.02.2012 в 21:49)
 

Можно начать отталкиваться от следующего запроса
SELECT
   YEAR(FROM_UNIXTIME(putdate)) AS putdate_year
   tbl.*
FROM
  tbl
ORDER BY
  putdate_year DESC

  Ответить  
 
 автор: OLi   (01.02.2012 в 22:33)   письмо автору
 
   для: cheops   (01.02.2012 в 22:27)
 

SELECT 
   YEAR(FROM_UNIXTIME(start_time)) AS putdate_year 
   protivniki.* 
FROM 
  protivniki 
ORDER BY 
  start_time DESC

Выдает ошибку вида:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'protivniki.*
FROM
protivniki
ORDER BY
start_time DESC
LIMIT 0, 30' at line 3

  Ответить  
 
 автор: cheops   (01.02.2012 в 22:39)   письмо автору
 
   для: OLi   (01.02.2012 в 22:33)
 

Да, это я запятую забыл, попробуйте так
SELECT  
   YEAR(FROM_UNIXTIME(start_time)) AS putdate_year,
   protivniki.*  
FROM  
  protivniki  
ORDER BY  
  start_time DESC

  Ответить  
 
 автор: OLi   (01.02.2012 в 22:49)   письмо автору
 
   для: cheops   (01.02.2012 в 22:39)
 

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

  Ответить  
 
 автор: cheops   (01.02.2012 в 22:51)   письмо автору
 
   для: OLi   (01.02.2012 в 22:49)
 

Заведите переменную $year и помещайте в неё год, а на каждой итерации сравнивайте с полем putdate_year, если они совпадают - ничего не выводите, если не совпадают - выводите года, а переменной $year присваивайте новое значение.

  Ответить  
 
 автор: OLi   (01.02.2012 в 22:53)   письмо автору
 
   для: cheops   (01.02.2012 в 22:51)
 

Благодарю

  Ответить  
 
 автор: OLi   (02.02.2012 в 00:11)   письмо автору
 
   для: OLi   (01.02.2012 в 22:53)
 

Еще одна сложность, подскажите как для запроса выше дописать чтобы суммировал значения поля pol
sum (pol) as pl

  Ответить  
 
 автор: cheops   (02.02.2012 в 00:15)   письмо автору
 
   для: OLi   (02.02.2012 в 00:11)
 

А вы сумму за какие периоды хотите получить? Если за один год, то не выйдет - нужно будет отдельный запрос формировать.

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

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