Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вычитать дату? 
:(
    Опции темы
dm9
Дата 27.12.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Есть столбец с типом DATETIME или TIMESTAMP(14).

Надо найти все строки, в которых данная отметка времени - не ранее, чем за 12 минут до NOW().

Под 4.0.25 всё прекрасно работало таким образом:
Код

WHERE NOW() - '00000000001200' > lastrequest

и таким тоже
Код

WHERE NOW() - '0000-00-00 00:12:00' > lastrequest


Под 4.1.14 это не работает.

Вопрос - как же правильно найти расстояние между датами.

Хранить дату как int - не предлагать.

PM MAIL ICQ   Вверх
Akina
Дата 27.12.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



SubTime, TimeDiff... мануалы-то читаем?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dm9
Дата 27.12.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Akina, а можно мне, как ОЧЕНЬ большому тормозу, примерчик на тему

Цитата(dm9 @ 27.12.2005, 17:28)
Надо найти все строки, в которых данная отметка времени - не ранее, чем за 12 минут до NOW().


?


Это сообщение отредактировал(а) dm9 - 27.12.2005, 17:24
PM MAIL ICQ   Вверх
Illuminaty
Дата 28.12.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 3
Всего: 56



Попробуй так
Код

WHERE MINUTE (NOW( )) - MINUTE (`lastrequest`) >12

`lastrequest` - это же поле для хранения времени у тебя?
ЗЫ У меня на MySQL 4.1.8 работает.
PM MAIL ICQ   Вверх
sergejzr
Дата 28.12.2005, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Если PHP то ябы сделал:

Код

$diff = time() - (12*60)


Ну и потом
Код

WHERE {$diff} > lastrequest



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Illuminaty
Дата 28.12.2005, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 3
Всего: 56



А лучше так сделать
Код

WHERE MINUTE (NOW( ) - `lastrequest`) >12

доплнительно можно посмотреть на сайте MYSQL

Это сообщение отредактировал(а) Illuminaty - 28.12.2005, 00:49
PM MAIL ICQ   Вверх
Illuminaty
Дата 28.12.2005, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 3
Всего: 56



Цитата(sergej @ 28.12.2005, 00:47)
Код

$diff = time() - 12

sergej.z, при всем уважении, но этот код не то что надо
Код

time() - 12
вернет время 12 секунд назад, а не минут.
Код

time() - 12*60
более похоже на правду
PM MAIL ICQ   Вверх
sergejzr
Дата 28.12.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Да я уже иправил. Неправильно прочитал условие, показалось 12 сек.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
dm9
Дата 28.12.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Тестируем.

Первый вариант.
Цитата(Illuminaty @ 28.12.2005, 01:35)
WHERE MINUTE (NOW( )) - MINUTE (`lastrequest`) >12


Путь будет не NOW(), а другой столбец. Назовём его r9.

Код

SELECT r9, lastrequest, MINUTE (r9) - MINUTE (lastrequest) AS result FROM chat_users


r9 = '2006-12-27 16:00:00'
lastrequest = '2006-12-27 15:59:57'
result = '-59'

Далеко от требуемого результата, не так ли?

Второй вариант.
Цитата(Illuminaty @ 28.12.2005, 01:48)
WHERE MINUTE (NOW( ) - `lastrequest`) >12


Код

SELECT r9, lastrequest, MINUTE (r9 - lastrequest) AS result FROM chat_users


r9 = '2006-12-27 16:00:00'
lastrequest = '2006-12-27 15:59:57'
result = '40'


Цитата(sergej @ 28.12.2005, 01:47)
Если PHP то ябы сделал:


Сергей, очень хотелось бы сделать это средствами СУБД. Иначе получается некрасиво как-то. Но пусть даже будет так. Что возвращает time()? Он возвращает не TIMESTAMP, он возвращает число секунд от начала эпохи. А TIMESTAMP - это число в формате 20051228000000 - то есть это не секунды. Твой код работать не будет тоже.

Это сообщение отредактировал(а) dm9 - 28.12.2005, 12:40
PM MAIL ICQ   Вверх
Illuminaty
Дата 28.12.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 3
Всего: 56



попробуй так
Код

SELECT r9, lastrequest
FROM ttt
where DATE_ADD(
lastrequest,  INTERVAL 12 MINUTE) > r9

а в предыдущих ответах я свою ошибку понялsmile
PM MAIL ICQ   Вверх
dm9
Дата 28.12.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Хм. Да, это будет работать для фиксированного числа минут/секунд, спасибо.

Но что, если эти "12 минут" у меня хранятся в другом столбце БД в формате '0000-00-00 00:12:00'? Насколько я понял, ADDDATE() такого не поддерживает. Это вообще возможно под MySQL 4.1? Под 4.0.25 всё работало smile

Добавлено @ 14:36
Я, кажется, понял. Формат `0000-00-00 00:12:00` считается некорректным.

"12 минут" буду хранить в БД как строковое поле interv в формате 'DAYS HOURS:MINUTES', а затем делать так:

WHERE DATE_ADD(lastrequest, INTERVAL interv DAY_MINUTE) > r9

Наверное, это решение задачи.


Это сообщение отредактировал(а) dm9 - 28.12.2005, 14:38
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.