mysql: Как сгрупировать по периоду?

123
malls
На сайте с 08.08.2005
Offline
255
#11
nat000:
Тоесть одной mysql командой не получится, группировать с помощью php?

Млин...

Не группировать с помощью... А задавать условия с помощью!!!

N0
На сайте с 12.11.2007
Offline
45
#12

условия запроса заданы правильно

Пластиковые окна Москва (http://vse-plastikovie-okna.ru) Стеклопакеты Москва (http://e-steklopaketi.ru)
N
На сайте с 06.05.2007
Offline
419
#13

Ниче не понятно, но знаете ли вы,что зону можно менять для текущей сессии ? set time_zone='+3:00';

Знаете ли вы, что часто даты хранят в виде int и тогда арифметика группировки сводится к целочисленному делению ?

Кнопка вызова админа ()
SF
На сайте с 11.10.2005
Offline
137
#14

надо дату привести к нужному виду и потом группировать по этому приведенному полю

select DATE_FORMAT(c.c_date, '%a') AS date_format from table c

group by date_format

вот привод даты к неделям DATE_FORMAT(c.c_date, '%Y-%u') as c_date_ned

вот привод даты к дням DATE_FORMAT(c.c_date, '%a') AS date_format

Инструкция: Как Правильно Делать Сайты: Домен, Хостинг, Установка CMS (http://www.3sd.ru/kak-delat-site/index.php).
N0
На сайте с 12.11.2007
Offline
45
#15

netwind, даты вообще-то хранят в разных форматах.

Конкретно в этой таблице дата хранится в формате yyyymmdd а не в int

по поводу

set time_zone='+3:00';

команда действует на момент записи данных, в моем примере данные уже записаны с учетом timezone

SellingFeis, спасибо. Это уже ближе к теме. Допустим, я переведу поле day в time в запросе select,

как добавить +1 час в group by? другими словами, сгруппировать по временному промежутку?

N
На сайте с 06.05.2007
Offline
419
#16

nat000, ну так конвертируйте данные каждого пользователя и храните все datetime. Нормально все будет и даже намного легче в последствии.

N0
На сайте с 12.11.2007
Offline
45
#17

netwind,

поменять таблицу и ее структуру не получится по многим причинам

это статистика партнерской программы,

продажи записываются по времени сервера,

а отображаться данные должны в зависимости от локального времени аффилиата, которое задается со стороны клиента

N
На сайте с 06.05.2007
Offline
419
#18

nat000, так это вы ДУМАЕТЕ, что там хранится в виде строки или на самом деле в таблице в этом поле используется char ? я как то не верю. если на самом деле там datetime - то и нет никакой проблемы. при выборе дат МОЖНО ПОДУМАТЬ, что это обычная строка. по-моему старый mysql так форматировал datetime, что они были похожи на строку.

N0
На сайте с 12.11.2007
Offline
45
#19

оба поля day и hour - int

но данные хранятся в виде

day: 20091022

hour: 2009102200 ..2009102223

это было сделано для удобства, потому что статистика для админа отображается и в часах и в днях

но вопрос не в этом

вопрос все еще открыт -как сгруппировать дату со смещением

N
На сайте с 06.05.2007
Offline
419
#20

Вас надо изолировать.

Впрочем, поиграйтесь с форматированием дат и приведением дебильных форматов к НОРМАЛЬНЫМ:

я предположил что даты хранятся в char, основная зона сервера +3:00, а в Омске сейчас +6:00


create table t (d char(20));
insert into t values ('200910292340'),('200910292240');

mysql> select str_to_date(d,'%Y%m%d%H%i') from t;
+-----------------------------+
| str_to_date(d,'%Y%m%d%H%i') |
+-----------------------------+
| 2009-10-29 23:40:00 |
| 2009-10-29 22:40:00 |
+-----------------------------+

mysql> select CONVERT_TZ(str_to_date(d,'%Y%m%d%H%i'),'+3:00','+6:00') from t;
+---------------------------------------------------------+
| CONVERT_TZ(str_to_date(d,'%Y%m%d%H%i'),'+3:00','+6:00') |
+---------------------------------------------------------+
| 2009-10-30 02:40:00 |
| 2009-10-30 01:40:00 |
+---------------------------------------------------------+


здесь char вместо int, но, я думаю, вам не привыкать напрягаться вместо того чтобы сразу проектировать правильно.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий