我有一个名为ticket
的数据库表,用于存储票证详细信息。表格的结构如下:
如您所见,该表有一个字段generated_on
,其中我将日期存储为UNIX TIMESTAMP。它用于存储生成故障单的日期。门票仅在接下来的10天内有效。
因此,每当用户尝试使用故障单时,系统应检查当前日期是否在故障单的generated_on
日期的10天内。我如何在MySQL中检查这个。我知道我们可以通过其他方式执行此操作,但我现在正尝试使用以下查询选择generated_on
:
$datequery=$this->db->query("select generated_on from ticket where user_id=$userid and video_id=$videoid and status=0");
然后尝试检查今天是否在10天之内。但是如何在单个MySQL查询中检查这个?我正在为我的项目使用CodeIgniter框架。
有人可以帮我找到合适的查询吗?
提前致谢。
答案 0 :(得分:2)
您只需要使用MySQL DATE_ADD()
函数添加10天,为此您必须先使用datetime
将unix时间戳转换为MySQL FROM_UNIXTIME()
格式,然后将其与当前值进行比较时间NOW()
关键部分:
DATE_ADD(FROM_UNIXTIME(generated_on), INTERVAL 10 DAY) > NOW()
完整查询:
$query = "SELECT generated_on FROM ticket WHERE user_id = " . $userid . " AND video_id = " . $videoid . " AND status = 0 AND DATE_ADD(FROM_UNIXTIME(generated_on), INTERVAL 10 DAY) > NOW()";
更新评论基础
根据评论和四舍五入,您可以使用以下内容:
DATE_ADD(CAST(FROM_UNIXTIME(generated_on) AS DATE), INTERVAL 10 DAY) > CURDATE()
只需更换NOW()
CURDATE()
我们使用的是日期而不是日期时间,我们还CAST
我们使用FROM_UNIXTIME
创建的日期时间
完整查询:
$query = "SELECT generated_on FROM ticket WHERE user_id = " . $userid . " AND video_id = " . $videoid . " AND status = 0 AND DATE_ADD(CAST(FROM_UNIXTIME(generated_on) AS DATE), INTERVAL 10 DAY) > CURDATE()";
答案 1 :(得分:0)
您将需要MySQL的DETE_ADD()函数。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
你的问题将是这样的:
选择generated_on 从票 其中user_id = $ userid 和video_id = $ videoid 和status = 0 和generated_on< = DATE_ADD(CURRENT_TIMESTAMP(),INTERVAL 10天);
希望这有帮助, 丹尼斯