Проблема с мускулом (запрос)
#1

Здравствуйте. Составил запрос для сравнения даты (в БД и текущая), но столкнулся с такой проблемой, в любом случае (если 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...");
Где я допустил ошибку? Подскажите пожалуйста.

Заранее благодарю вас за помощь!
Reply
#2

какой тип поля date?
Reply
#3

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
какой тип поля date?
Int.
Reply
#4

Ошибка в том что в твоем запросе 'NOW()+0' просто строка.
Уже сто раз говорил, не знаете для чего нужны кавычки не пихайте их где попало!!!
Код:
SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date` >= UNIX_TIMESTAMP()
Reply
#5

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Ошибка в том что в твоем запросе 'NOW()+0' просто строка.
Уже сто раз говорил, не знаете для чего нужны кавычки не пихайте их где попало!!!
Код:
SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date` >= UNIX_TIMESTAMP()
Благодарю за помощь, Stepashka!
Значит '' = строка? Т.е. если нужно сравнивать числовое значение то не нужно вставлять кавычки?
И какая разница между UNIX_TIMESTAMP() и NOW() + 0? Оба возвращают целое число? (функции даты и времени)
Reply
#6

Рекомендую пользоваться офф документацией: функции даты и времени
' или " обозначают строку.
` экранируют ключи, в том случае если они пересекаются именами с зарезервированными словами.
Числа можно не экранировать.
Функции экранировать вообще не надо!

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());
это исключит ошибку когда время у БД и мода будет разное.
Reply
#7

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Рекомендую пользоваться офф документацией: функции даты и времени
' или " обозначают строку.
` экранируют ключи, в том случае если они пересекаются именами с зарезервированными словами.
Числа можно не экранировать.
Функции экранировать вообще не надо!

UNIX_TIMESTAMP() возвращает метку времени в integer формате.
NOW() возвращает дату в формате YYYY-MM-DD HH:mms, прибавление нуля заставляет мускул конвертировать её в число причем вещественное.

А ещё я рекомендую сравнивать не с меткой времени в мускуле, а с меткой времени в моде:
pawn Код:
mysql_format(1, STR256, 188, "SELECT `date` FROM "TABLE_BLACKLIST" WHERE `date`>=%d", gettime());
это исключит ошибку когда время у БД и мода будет разное.
Ах вот оно что, а на стороннем ресурсе не уточнялось о каком типе числа идет речь ( NOW() + 0 ).
На счет сравнения не доглядел, спасибо.
По поводу экранирования немного не понял ...
Reply
#8

На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
Reply
#9

Quote:
Originally Posted by White_116
Посмотреть сообщение
На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
Хм, а mysql учитывает это?
Reply
#10

Quote:
Originally Posted by White_116
Посмотреть сообщение
На заметку, gettime() не учитывает часовой пояс, могут возникнуть некоторые "визуальные" казусы.
не возникнет, на сервере не может быть двух времен, он весь работает в одном часовом поясе.
Quote:
Originally Posted by Ted67
Посмотреть сообщение
Хм, а mysql учитывает это?
нет.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)