2012-05-01 3 views
0

У меня есть запрос, как это:Mysql запрос времени смешивания даты и позиции

SELECT message_text 
FROM messages 
WHERE message_date >= '$connection_time' 

достаточно просто. Это позволяет мне получать сообщения, отправляемые с момента подключения.

Но мне также нужно получить последние 15 сообщений, отправленных до этого времени соединения. (Лучше всего было бы сделать все это с помощью одного запроса).

Как бы я это сделал?

PS: Я думал о получении идентификатора первого сообщения и вычитании его 15, но он работает только в том случае, если идентификаторы являются последовательными, что не всегда так.

спасибо.

ответ

1

Регистрация следующий запрос уже существующий с UNION:

SELECT message_text 
FROM  messages 
WHERE message_date < '$connection_time' 
ORDER BY message_date DESC 
LIMIT 15 

Кстати, я действительно очень надеюсь, что вы абсолютно уверены $connection_time был лишен каких-либо потенциальных атак путем внедрения SQL (если вы не знаете, что это значит, пойдите и прочитайте около Bobby Tables). Вы должны использовать подготовленные инструкции, в которые вы передаете свои переменные в качестве параметров, которые не оцениваются для SQL.

+0

Спасибо, это сработало. Об инъекции: значение не генерируется пользователем, а функцией, как только пользователь подключается. Таким образом, на данный момент никаких помех для любого пользовательского ввода нет. Я думаю прямо? Когда я получаю пользовательский ввод и вам нужно запросить его, я проверяю, что данные соответствуют тому, что должно быть (номера только и т. Д.). – Baylock

+0

До тех пор, пока вы доверяете своей функции, да. Но это хорошая дисциплина для использования параметризованных запросов в любом случае (так что вы не забываете, что время, когда вы * * обрабатываете пользовательские данные); Кроме того, мне нравится помещать предупреждение всякий раз, когда вижу переменные, встроенные в SQL, в интересах любых других читателей. – eggyal

+0

Я получаю вашу точку, но переменная, как вы ее видите, если только она не сгенерирована, всегда готова к ее использованию. Мне просто не нравится снимать его внутри запроса, ради ясности. Для примера он генерируется простой функцией date(). Я считаю, что это можно доверять. Я действительно благодарю вас за вашу заботу. Ты прав. Кто-то, кто не знает, как объединиться, скорее всего, совершит такие ошибки :-) – Baylock

Смежные вопросы