[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка данных по определенным датам
Страницы: 1, 2
Эли4ка
Здравствуйте,дорогие форумчане!Возникла задача-в таблицы есть следующие данные
id text datetime
1 ttt 1234567890
2 rrr 1455454775
n NNN unix_time

Данных много,и дата добавления данных хранится в Unixtime.Так вот задача-нужно выбирать данные по разным критериям-за месяц,за год,за час,за минуту,за 2 минуты,за две недели и много разных(они динамические-задаются пользователем)
Казалось бы,чего сложного,но...Дело в том,что пользователи с разными часовыми поясами,и например,если пользователь из Владивостока будет выбирать данные за последний день,то он получит одни данные,а для Москвы-уже другие,так как разница во времени-часовые пояса.Пример-Если выбирают данные для Москвы то допустим 2016 3 12 00 00 00 и 2016 4 12 00 00 00(данные за день),то если без смещения для Владивостока получим 2016 3 12 7 00 00 и 2016 3 13 7 00 00)
Так вот вопрос-как,зная смещение часового пояса(оно известно,ничего определять php,mysql'ом не нужно) для Москвы выбрать данные со своим смещением,а для Владивостока со своим?
depp
unixtime - плохой формат хранения даты в базе. мое мнение.
в вашей задаче надо приводить все к типу datetime (FROM_UNIXTIME) и работать с CONVERT_TZ.
Эли4ка
depp
не поняла,если честно sad.gif
walerus
Эли4ка
Цитата
datetime (FROM_UNIXTIME)

mysql> SELECT FROM_UNIXTIME(1255033470);
+---------------------------+
| FROM_UNIXTIME(1255033470) |
+---------------------------+
| 2009-10-08 13:24:30      |
+---------------------------+
1 row in set (0.01 sec)

convert_tz конвертирует одно и то же время в нужную тайм зону
Цитата
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
        -> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
        -> '2004-01-01 22:00:00'


Так же можно рассчитать выбранный период для отображения информации и работать с Unix Time, все зависит от конечной цели.
Эли4ка
Все равно не понимаю sad.gif
Сейчас у меня абсолютное время.При выборке мне нужно пользователю из Моксвы показывать с поправкой на его время,а из Владивостока на его.
Вот как это реализовать? unsure.gif
depp
Эли4ка
вам дали решение для той задачи, которую вы описали выше.
решать должны вы сами. дайте свое решение, как сделали вы.
Игорь_Vasinsky
depp тише, тише, это свои, к тому же каратисты.

Свернутый текст
user posted image



Эли4ка
ну про формат хранения данных надеюсь тебе понятно - крайне не удачный.

вот же тебе пример дали - как с твоим форматом работать - используя часовые пояса.

SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
depp
Цитата (Игорь_Vasinsky @ 22.11.2016 - 14:32)
depp тише, тише, это свои, к тому же каратисты.

я с целью выяснить исходную задачу. а то не совсем понятно по каким критериям выборка.
Игорь_Vasinsky
depp
ну как я понял - средствами бд делать запросы за определённый период, учитывая часовой пояс.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Цитата
ну как я понял - средствами бд делать запросы за определённый период, учитывая часовой пояс.

Игорь_Vasinsky,верно

Эли4ка
Цитата
Эли4ка
ну про формат хранения данных надеюсь тебе понятно - крайне не удачный.

вот же тебе пример дали - как с твоим форматом работать - используя часовые пояса.

Игорь_Vasinsky,сейчас буду пробовать

Эли4ка
Вот тогда вопрос-а как искать,если не известна дата
то есть если в базе есть такое '2004-01-01 12:00:00',но оно по Гринвичу,а в Москве тогда уже было 2004-01-01 15:00:00,а во Владивостоке 2004-01-01 20:00:00
Эли4ка
врубилась)
SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00') = 2004-01-01 22:00:00;
Эли4ка
SELECT *
FROM `test`
WHERE CONVERT_TZ( '2016-11-09 00:00:00', '+00:00', '+10:00' ) = '2016-11-09 10:00:00'
LIMIT 0 , 30

Боже.какая я тупая...я два дня полоскала всем мозги такой простой фигней...нет.чтобы почитать мануал...
ребят,плюсики в репутацию чуть позже-сейчас закреплю,чтобы не забыть
Спасибо всем огромное :)
Эли4ка
Цитата
depp тише, тише, это свои, к тому же каратисты.

Игорь_Vasinsky,Спасибо,Игорь rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.