Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: группировка GROUP BY MONTH из двух таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
KingStar
Отправлено: 16 Августа, 2012 - 12:43:25
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Не знаю как решить, вроде уже все перепробовал, суть проблемы:

имеются 3 таблицы, с одинаковыми полями, в которых записывается дата в unixtime, нужно сделать выборку из этих таблиц, и сгруппировать все данные по месяцам. выборку делаю через UNION, но у меня они группируются таблица от таблицы отдельно, а мне необходимо чтобы все данные группировались. Вот мой код

CODE (SQL):
скопировать код в буфер обмена
  1.    SELECT * FROM  `table_1` WHERE  `status` = '1'
  2.       GROUP BY MONTH(FROM_UNIXTIME(datetime, '%Y-%m-%d %H:%i:%s'))
  3.  
  4. UNION
  5.  
  6.    SELECT * FROM  `table_2` WHERE  `status` = '1'
  7.       GROUP BY MONTH(FROM_UNIXTIME(datetime, '%Y-%m-%d %H:%i:%s'))
  8.  
  9. UNION
  10.  
  11.    SELECT * FROM  `table_3` WHERE  `status` = '1'
  12.       GROUP BY MONTH(FROM_UNIXTIME(datetime, '%Y-%m-%d %H:%i:%s'))
  13.  
  14. ORDER BY datetime DESC


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Stierus Супермодератор
Отправлено: 16 Августа, 2012 - 12:45:48
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




сначала делай выборку из этих трех таблиц в одну общую временную, потом уже group by
 
My status
 Top
KingStar
Отправлено: 16 Августа, 2012 - 13:09:08
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




не выходит чет у меня, думаю следует сказать, что SELECT в каждой выборке нужен вот такой

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.    COUNT(id),
  3.    datetime,
  4.    SUM(value),
  5.    id
  6. FROM
  7.    `table_*`
  8. WHERE
  9.    `status` = '1'


pdo бьет ошибки, и хот ты тресни


-----
То что программа работает, не означает что она написана правильно!
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2012 - 13:14:46
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




KingStar пишет:
GROUP BY MONTH(FROM_UNIXTIME(datetime, '%Y-%m-%d %H:%i:%s'))

Для чего такая конструкция? Обычный MONTH вполне подойдет.
Далее, какой смысл в GROUP BY, если нет ни одной группирующей функции?
Как пример в один запрос (с подсчетом в COUNT):
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, COUNT(*) FROM
  2.   (SELECT id, `datetime` FROM `table_1`
  3.   UNION ALL
  4.   SELECT id, `datetime` FROM `table_2`
  5.   UNION ALL
  6.   SELECT id, `datetime` FROM `table_3`) AS unitable
  7. GROUP BY MONTH(`datetime`)

В добавок, не стоит называть поля в стиле `datetime` - это название типа данных и при определенных условиях можно получить неожиданные результаты. Ну и, наконец, комбинация GROUP BY + ORDER BY не приводит к сортировке по исходному полю, так как сначала формируются группы.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
KingStar
Отправлено: 16 Августа, 2012 - 13:26:18
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




EuGen пишет:
Для чего такая конструкция? Обычный MONTH вполне подойдет


потому что дата хранится в unix-формате

EuGen пишет:
В добавок, не стоит называть поля в стиле `datetime`


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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2012 - 13:29:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




KingStar пишет:
потому что дата хранится в unix-формате

MONTH применимо к типу TIMESTAMP и вернет корректный результат.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
KingStar
Отправлено: 16 Августа, 2012 - 13:38:24
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




DATETIME хранит в формате 'YYYY-MM-DD HH:MM:SS'
DATE хранит в формате 'YYYY-MM-DD'

TIMESTAMP(14) - YYYYMMDDHHMMSS
TIMESTAMP(12) - YYMMDDHHMMSS
TIMESTAMP(10) - YYMMDDHHMM
TIMESTAMP(8) - YYYYMMDD
TIMESTAMP(6) - YYMMDD
TIMESTAMP(4) - YYMM
TIMESTAMP(2) - YY

я ошибаюсь??? в моем случае дата сохраняется как time
(Добавление)
можно было конечно сохранять в этот тип таблицы, я сохраняю в int


-----
То что программа работает, не означает что она написана правильно!
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2012 - 13:43:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Разумеется, все отличия типов можно посмотреть в мануале (хотя бы здесь). Но речь все же о функции. А она работает корректно и с тем, и с другим типом данных.
Или Вы имеете ввиду, что Вы храните данные как INT - тип? Тогда построение понятно. Но непонятен смысл использования INT, гораздо удобнее использовать TIMESTAMP


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
KingStar
Отправлено: 16 Августа, 2012 - 13:52:46
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




EuGen Спасибо за наводку, твоя конструкция сработала, но к сожалению без FROM_UNIXTIME не группирует Подмигивание но все ровно спасибо


-----
То что программа работает, не означает что она написана правильно!
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2012 - 13:53:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




KingStar пишет:
без FROM_UNIXTIME не группирует

Потому что, как Вы и упомянули выше, Вы используете INT для хранения даты и времени.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
KingStar
Отправлено: 16 Августа, 2012 - 13:55:33
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




да, данные хранятся в типе int, как-то стразу так научили, вот в прывычке уже int(10) UNSIGNED


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB