2016-03-22 2 views
1

Мы используем приведенный ниже обновленный SQL, чтобы получить список клиентов из нашего db, которому мы отправляем SMS до 3 дней.Получить все строки до определенного дня

SELECT * FROM sms WHERE sent_time >= NOW() - INTERVAL 3 DAY; 

Таблица sms обновляется ежедневно вместе с sent_time столбца со значением по умолчанию 0 или последнего отправленного времени.

Есть строки со значением sent_time = 0, но ни одна строка не выбрана указанным выше сценарием.

Каков правильный SQL?

Ранее мы использовали SQL с помощью PHP, как указано ниже:

$vTime = time() - (60*60*24*3); 
$sql = "SELECT * FROM sms WHERE $vTime <= sent_time"; 
+1

Вы выбираете значения больше 0, то наверняка что вы никогда не получите sent_time 0 ... Добавить "OR sent_time = 0" – Salketer

ответ

1

Функцию NOW() вернет текущую дату и время, но как я могу см., что раньше вы использовали PHP time(), который возвращает отметку времени Unix. Эквивалент SQL - UNIX_TIMESTAMP().

Синтаксис UNIX_TIMESTAMP()

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP() - (60*60*24*3); 

Синтаксис UNIX_TIMESTAMP(date)

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY) OR sent_time = 0 
0

Просто выберите нужный запрос ..

SELECT * FROM sms WHERE sent_time >= DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW(); 
1

NOW() - INTERVAL 3 DAY; возвращает DATETIME, а echo time() - (60*60*24*3); возвращает метку времени.

Если столбец базы данных является отметкой о времени, ваш тест MySQL никогда не будет работать, используйте вместо этого:

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY) 
0

Попробуйте ниже:

SELECT * FROM sms WHERE sent_time <= DATE_SUB(NOW(), INTERVAL 3 DAY) OR sent_time=0; 
Смежные вопросы