Проблема с NOW()

BRat

o_0
Проблема с NOW()

Использую вот такой запрос -
PHP:
INSERT INTO `table` (user_id, start_time, end_time) VALUES
            (1, NOW() - 100, NOW() - 50),
            (2, NOW()-51, NOW() - 50),
            (4, NOW()-100, NOW() - 52)
Запускаю его три раза, получаю след. данные в таблице -
PHP:
id   user_id     start_time     end_time
1	1	2006-12-22 12:57:06	2006-12-22 12:57:56
2	2	2006-12-22 12:57:55	2006-12-22 12:57:56
3	4	2006-12-22 12:57:06	2006-12-22 12:57:54
4	1	2006-12-22 12:57:11	0000-00-00 00:00:00
5	2	0000-00-00 00:00:00	0000-00-00 00:00:00
6	4	2006-12-22 12:57:11	2006-12-22 12:57:59
7	1	2006-12-22 12:57:48	0000-00-00 00:00:00
8	2	0000-00-00 00:00:00	0000-00-00 00:00:00
9	4	2006-12-22 12:57:48	0000-00-00 00:00:00
mysql 4.0.28

Что не так с запросом?
 

Фанат

oncle terrible
Команда форума
скажи-ка, пожалуйста, а что ты хочешь получить выражовыванием NOW() - 100?
 

Фанат

oncle terrible
Команда форума
круто. а литры из километров не пробовал вычитать?
 

BRat

o_0
Фанат
хм, предположим что это работать не должно - тогда почему такие результаты получаем при вставке?
 

Фанат

oncle terrible
Команда форума
для того, чтобы узнать ответ на этот вопрос, нужна теоретическая подготовка. которой у тебя нет.

поэтому отправляйся-ка ты читать мануал по мускулю, функции для работы с датой.
 

BRat

o_0
Фанат
в этом запросе участвует только одна функция оттуда, мануал по ней я прочел, поэтому можешь ответ сказать )
 

Фанат

oncle terrible
Команда форума
ну, раз эта функция не даёт нужный тебе результат, то ЧИТАЙ ПРО ДРУГУЮ

что за дурацкую привычку взял спорить СО МНОЙ?
 

BRat

o_0
Фанат
я разве спорил? не помню )
Запрос я уже переделал. Я спрашивал про результаты вставки
 

BRat

o_0
Фанат
1. просто NOW() - дату в формате 0000:00:00 00-00-00
2. NOW() +- число - дату в ггггммддччммсс
 

Фанат

oncle terrible
Команда форума
2 пункт - это феерия. ага. функции у нас научились телепатии. и если знают, что с результатом будут производить арифметические действия, то возвращают в другом формате.
 

BRat

o_0
Фанат
PHP:
mysql> SELECT NOW() + 0;
-> 19971215235026
это пример из мануала, я неправильно его понял?
 

Апельсин

Оранжевое создание
BRat, а причем здесь этот пример из мануала?
Все что он делает - это меняет формат отображения.
Сути это не меняет. По отношения к типам даты и времени нельзя непосредственно применять арифметические действия, для этого существуют определенные функции, которые описаны в мануале.
Куда Фанат вас собственно и послал (совершенно справедливо, между прочим).
 

BRat

o_0
Апельсин
я не совсем это спрашивал ) но думаю дальнейшеее обсуждение бессмысленно. Будем считать что запрос из первого топика абсолютно некорректный, и поэтому вставить в базу может всё что угодно
 

kos

Новичок
#

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

При вызове данной функции без аргумента она возвращает временную метку UNIX_TIMESTAMP (секунды с 1970-01-01 00:00:00 GMT) как беззнаковое целое число. Если функция UNIX_TIMESTAMP() вызывается с аргументом date, она возвращает величину аргумента как количество секунд с 1970-01-01 00:00:00 GMT. Аргумент date может представлять собой строку типа DATE, строку DATETIME, величину типа TIMESTAMP или число в формате YYMMDD или YYYYMMDD местного времени:

mysql> SELECT UNIX_TIMESTAMP();
-> 882226357

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

При использовании функции UNIX_TIMESTAMP в столбце TIMESTAMP эта функция будет возвращать величину внутренней временной метки непосредственно, без подразумеваемого преобразования строки во временную метку (``string-to-unix-timestamp'' ). Если заданная дата выходит за пределы допустимого диапазона, то функция UNIX_TIMESTAMP() возвратит 0, но следует учитывать, что выполняется только базовая проверка (год 1970-2037, месяц 01-12, день 01-31). Если необходимо выполнить вычитание столбцов UNIX_TIMESTAMP(), результат можно преобразовать к целым числам со знаком. See Раздел 6.3.5, «Функции приведения типов».
#

FROM_UNIXTIME(unix_timestamp)

Возвращает представление аргумента unix_timestamp как величину в формате YYYY-MM-DD HH:MM:SS или YYYYMMDDHHMMSS, в зависимости от того, в каком контексте используется функция - в строковом или числовом:

mysql> SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'

mysql> SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300

-~{}~ 22.12.06 17:18:

манулы рулят
 

kos

Новичок
BRat
тебе нужно вставит в базу текущее время - n секунд, или я неправильно понял?
UNIX_TIMESTAMP() - секунды с 1970-01-01 00:00:00
вычитаешь из них n секунд UNIX_TIMESTAMP()-100 иприводиш к формату YYYY-MM-DD HH:MM:SS
FROM_UNIXTIME(UNIX_TIMESTAMP()-100)
 
Сверху