Проблема с мускулом (запрос) -
Ted67 - 14.12.2013
Здравствуйте. Составил запрос для сравнения даты (в БД и текущая), но столкнулся с такой проблемой, в любом случае (если date будет меньше текущего или же больше) я в лог получаю "
yeah".
pawn Код:
mysql_format(1, STR256, 188, "SELECT `date` FROM `"TABLE_BLACKLIST"` WHERE `date` >= 'NOW()+0'");
Test = mysql_query(1, STR256);
cache_get_data(rows, fields, 1);
if(rows >= 1) print("Yeah");
else print("No...");
Где я допустил ошибку? Подскажите пожалуйста.
Заранее благодарю вас за помощь!
Re: Проблема с мускулом (запрос) -
Stepashka - 14.12.2013
какой тип поля
date?
Re: Проблема с мускулом (запрос) -
Ted67 - 14.12.2013
Quote:
Originally Posted by Stepashka
какой тип поля date?
|
Int.
Re: Проблема с мускулом (запрос) -
Stepashka - 14.12.2013
Ошибка в том что в твоем запросе 'NOW()+0' просто строка.
Уже сто раз говорил, не знаете для чего нужны кавычки не пихайте их где попало!!!
Код:
SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date` >= UNIX_TIMESTAMP()
Re: Проблема с мускулом (запрос) -
Ted67 - 14.12.2013
Quote:
Originally Posted by Stepashka
Ошибка в том что в твоем запросе 'NOW()+0' просто строка.
Уже сто раз говорил, не знаете для чего нужны кавычки не пихайте их где попало!!!
Код:
SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date` >= UNIX_TIMESTAMP()
|
Благодарю за помощь,
Stepashka!
Значит '' = строка? Т.е. если нужно сравнивать числовое значение то не нужно вставлять кавычки?
И какая разница между UNIX_TIMESTAMP() и NOW() + 0? Оба возвращают целое число? (
функции даты и времени)
Re: Проблема с мускулом (запрос) -
Stepashka - 14.12.2013
Рекомендую пользоваться офф документацией:
функции даты и времени
' или
" обозначают строку.
` экранируют ключи, в том случае если они пересекаются именами с зарезервированными словами.
Числа можно не экранировать.
Функции экранировать вообще не надо!
UNIX_TIMESTAMP() возвращает метку времени в integer формате.
NOW() возвращает дату в формате
YYYY-MM-DD HH:mm:ss, прибавление нуля заставляет мускул конвертировать её в число причем вещественное.
А ещё я рекомендую сравнивать не с меткой времени в мускуле, а с меткой времени в моде:
pawn Код:
mysql_format(1, STR256, 188, "SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date`>=%d", gettime());
это исключит ошибку когда время у БД и мода будет разное.
Re: Проблема с мускулом (запрос) -
Ted67 - 14.12.2013
Quote:
Originally Posted by Stepashka
Рекомендую пользоваться офф документацией: функции даты и времени
' или " обозначают строку.
` экранируют ключи, в том случае если они пересекаются именами с зарезервированными словами.
Числа можно не экранировать.
Функции экранировать вообще не надо!
UNIX_TIMESTAMP() возвращает метку времени в integer формате.
NOW() возвращает дату в формате YYYY-MM-DD HH:mm s, прибавление нуля заставляет мускул конвертировать её в число причем вещественное.
А ещё я рекомендую сравнивать не с меткой времени в мускуле, а с меткой времени в моде:
pawn Код:
mysql_format(1, STR256, 188, "SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date`>=%d", gettime());
это исключит ошибку когда время у БД и мода будет разное.
|
Ах вот оно что, а на стороннем ресурсе не уточнялось о каком типе числа идет речь ( NOW() + 0 ).
На счет сравнения не доглядел, спасибо.
По поводу экранирования немного не понял ...
Re: Проблема с мускулом (запрос) -
White_116 - 14.12.2013
На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
Re: Проблема с мускулом (запрос) -
Ted67 - 14.12.2013
Quote:
Originally Posted by White_116
На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
|
Хм, а mysql учитывает это?
Re: Проблема с мускулом (запрос) -
Stepashka - 15.12.2013
Quote:
Originally Posted by White_116
На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
|
не возникнет, на сервере не может быть двух времен, он весь работает в одном часовом поясе.
Quote:
Originally Posted by Ted67
Хм, а mysql учитывает это?
|
нет.