2016-09-15 3 views
0

Я пытаюсь получить все строки из базы данных, которая была добавлена ​​между 5 и 10 минутами назад.Получение результатов между датами в PHP/MySQL

Вот что я пробовал:

$query9 = mysql_query("SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 5 minute) AND date_sub(now(), interval 10 minute);"); 

$onlineUsersLast10Mins = mysql_num_rows($query9); 

Несмотря на данные в базе данных из 6,7,8 и 9 минут назад, этот сценарий не выбирает его. Где я иду не так?

для информации, даты хранятся в виде метки времени в обычном формате гггг-мм-дд чч: мм: сс

+0

кажется, что левая сторона вашего между интервалом больше правой. Если вы меняете их, хорошо ли это работает? –

+0

Простите, что вы имеете в виду? – Shane

+0

Я напишу ответ, где попытаюсь прояснить вашу проблему и объяснить решение. Медведь со мной :) –

ответ

1

точка с запятой в конце запроса перед последней двойной кавычки необходимо удалить:

$query9 = mysql_query("SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 10 minute) AND date_sub(now(), interval 5 minute)"); 

Это должно сработать.

+0

Привет, к сожалению, это не повлияло ...? – Shane

+0

Привет, сделал редактирование, также ваш интервал должен иметь дату, которая находится еще вовремя вовремя ---> см. Здесь http://stackoverflow.com/questions/9926147/mysql-how-to-use-date- суб-в-между-п –

0

Давайте посмотрим на BETWEEN's documentation.

BETWEEN работает с интервалом, но если вы посмотрите на этот официальный пример:

MySQL> SELECT 2 МЕЖДУ 1 И 3, 2 МЕЖДУ 3 и 1;

-> 1, 0

вы увидите, что 2 находится между 1 и 3, но 2 не между 3 и 1. Таким образом, если правая часть больше, чем с левой стороны, как и в второй случай, когда 3 - левый, а 1 - правый, то ваш элемент не будет между ними.

Итак, 2 находится между 1 и 3, но 2 не между 3 и 1.

Давайте посмотрим на ваш запрос:

SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 5 minute) AND date_sub(now(), interval 10 minute); 

Левая сторона содержит момент раньше, чем сейчас, с 5 минутами, а правая сторона содержит момент раньше, чем сейчас, с 10 минутами. Итак, правая сторона на самом деле раньше (меньше), чем левая. Мы должны видеть, есть ли у нас значения от 10 минут назад, и 5 минут назад, а не наоборот :)

Таким образом, это должно быть запрос:

SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 10 minute) AND date_sub(now(), interval 5 minute); 
Смежные вопросы