使用MYSQL检查今天是否在数据库中某个字段的10天内

使用MYSQL检查今天是否在数据库中某个字段的10天内,mysql,codeigniter,unix-timestamp,Mysql,Codeigniter,Unix Timestamp,我有一个名为ticket的数据库表,用于存储票据详细信息。该表的结构如下所示: 正如您所看到的,表中有一个字段generated\u on,其中我将日期存储为UNIX时间戳。它用于存储生成票据的日期。这张票的有效期只有10天 因此,每当用户尝试使用票据时,系统应检查当前日期是否在票据生成日期的10天内。我如何在MySQL中检查这个。我知道我们可以通过其他方式来实现,但是,我现在正在尝试通过以下查询选择生成的: $datequery=$this->db->query("select

我有一个名为
ticket
的数据库表,用于存储票据详细信息。该表的结构如下所示:

正如您所看到的,表中有一个字段
generated\u on
,其中我将日期存储为UNIX时间戳。它用于存储生成票据的日期。这张票的有效期只有10天

因此,每当用户尝试使用票据时,系统应检查当前日期是否在票据生成日期的10天内。我如何在MySQL中检查这个。我知道我们可以通过其他方式来实现,但是,我现在正在尝试通过以下查询选择
生成的

$datequery=$this->db->query("select generated_on from ticket where user_id=$userid and video_id=$videoid and status=0");
然后检查今天是否在10天之内。但是如何在一个MySQL查询中检查这一点呢?我正在为我的项目使用CodeIgniter框架

有人能帮我找到合适的查询吗


提前感谢。

您只需要使用MySQLs
DATE\u add()
函数添加10天,要做到这一点,您必须首先使用
FROM\u UNIXTIME()
将unix时间戳转换为MySQL
datetime
格式,然后使用
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()";
$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()";
根据评论进行更新

根据评论,并四舍五入到整天,您可以使用以下选项:

DATE_ADD(CAST(FROM_UNIXTIME(generated_on) AS DATE), INTERVAL 10 DAY) > CURDATE()
只需将
NOW()
替换为
CURDATE()
我们使用日期而不是日期时间,我们还
CAST
使用
FROM\u UNIXTIME

完整查询:

$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()";
$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()";
您需要MySQL中的DETE_ADD()函数。

您的任务如下:

选择已生成的\u on 从票上 其中user_id=$userid 和video_id=$videoid 和状态=0
并生成了_onupdated as have
,但它应该是
>NOW()
:)此查询不符合我的需要。即使我在10天前生成了罚单,查询在今天也不起作用。你能详细说明一下吗?我已经用我的数据库测试了这个查询的条件部分,使用时间戳字段,它可以完美地得到时间戳在十天前的结果。当你说它在“今天”不起作用时,你的意思是你需要把它凑到一整天吗?如果您的时间映射是十天前的12:00,十天后的12:01,则不包括在内。假设我在3月31日生成了票,那么我应该能够从当天使用到10天,即直到4月9日。我应该无法在3月31日之前和4月9日之后使用它。我明白了,所以您希望将其四舍五入到整天?如果我在3月31日12:00生成了一张票证,那么我将能够在4月9日23:59之前查看它?此查询不适用于我的条件。如果我在10天前生成了票据,我现在也可以使用它了..您好。以下是更新后的查询:选择a.generated_on from ticket作为a.user_id=$userid和a.video_id=$videoid和a.status=0和a.generated_on