我们正在使用以下更新的SQL从我们的数据库中获取客户列表,我们会在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";
答案 0 :(得分:1)
函数NOW()
将返回当前日期和时间,但正如我所见,您之前使用过PHP time(),它返回一个Unix-Timestamp。 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
答案 1 :(得分: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)
答案 2 :(得分:0)
只需更改选择查询..
SELECT * FROM sms WHERE sent_time >= DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW();
答案 3 :(得分:0)
尝试以下:
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
}
Schema::table('articles', function (Blueprint $table) {
$table->string('description');
}