2013-02-11 1 views
0

Я использую таблицу базы данных со следующими данными:Retrive данные из моих-SQL базы данных в течение последних 30 минут

Column Number | Column name | Data type 
--------------------------------------------- 
1    | cardid  | int(5) 
2    | price  | decimal(5,2) 
3    | isbuyprice | int(1) 
4    | date  | date 
5    | time  | time 

Теперь я хочу, чтобы получить данные, которые вставлены в таблицу в последнем 30 минут. Я попытался, используя следующий код, но он извлекаться мне все строки моего стола:

"SELECT * FROM table1 WHERE time > (now() - INTERVAL 30 MINUTE)"; 

ответ

1
"SELECT * FROM table1 WHERE time > (time(now()) - INTERVAL 30 MINUTE) 
and date=CURDATE()"; 

лучшим решением будет, если вы в состоянии изменить таблицы БД, то изменить поле даты для временной метки и удалить поле времени , то этот запрос будет работать. в противном случае используйте приведенный ниже код с вашей текущей структурой db.

"SELECT * FROM table1 WHERE time > time(time(now())-interval 30 minute) 
and date=CURDATE()"; 

думаю, что это сработает. Благодарю.

+1

Нет, это не будет работать, например, когда NOW() будет '2013-02-10 00: 15: 00', он не вернет последние 30-минутные строки. –

+0

Это решение не сработало для меня. – user1929236

+0

@ user1929236 мой ответ редактируется. – ripa

0

Проверить это

SELECT * FROM table1 
WHERE date=CURDATE() AND TIME_TO_SEC(time) > TIME_TO_SEC(CURRENT_TIME()) - 1800 
+0

это решение не сработало для меня ..... – user1929236

+0

Обновлен ответ –

1

У вас есть две отдельные поля, один для даты и один для времени, так что вы могли бы использовать что-то вроде этого:

SELECT * 
FROM table1 
WHERE 
    UNIX_TIMESTAMP(date) + TIME_TO_SEC(time) >= 
    UNIX_TIMESTAMP(NOW() - INTERVAL 30 MINUTE) 

UNIX_TIMESTAMP преобразует date в секундах с 1970-01-01 мы добавляем секунды временной части с time_to_sec, и мы сравниваем результат с NOW()-INTERVAL 30 MINUTE, преобразованным в секунды.

0
Select * from table1 where concat (date, ' ', time) > (now() - interval 30 minute) 
1
SELECT * FROM table1 WHERE time BETWEEN CURTIME() AND TIME(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) 

надеюсь, что это может помочь вам

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