SA-MP Forums Archive
Проблема с мускулом (запрос) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Проблема с мускулом (запрос) (/showthread.php?tid=481188)



Проблема с мускулом (запрос) - 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:mms, прибавление нуля заставляет мускул конвертировать её в число причем вещественное.

А ещё я рекомендую сравнивать не с меткой времени в мускуле, а с меткой времени в моде:
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 учитывает это?
нет.