我有这个网站,用户每天可以在这里创建如此多的帖子,称为“#clippets'在我检查限制之前,我已经使用了一些SQL来获得'剪辑的总数'在当天。
所以,让我们说我只想让用户制作20个剪辑'一天,不是基于时间,只是基于一天,好像我是在过去的24小时基础上,这就像用户一直在追逐极限......
无论如何,这是我的SQL:
$date = date("Y-m-d");
$sql = "SELECT COUNT(id) FROM clippets WHERE userID = ? AND DATE(createdAt) = '$date'; ";
我的问题是......这是一种缓慢的方法来解决这个问题,使用PHP日期函数然后在SQL查询中使用它,是否将它们视为字符串或?因为createdAt字段是日期时间数据类型,所以MySQL将两个日期转换为字符串然后比较?这是一个缓慢的方式吗?
答案 0 :(得分:1)
MySQL不会将这两个日期转换为字符串进行比较。它将字符串转换为日期一次,并将其用于所有其他比较。将日期参数作为字符串传递是标准做法,而尝试做其他事情则不是优化的良好来源。
但是,如果您只对当前日期感兴趣,则根本不需要传递日期参数。您可以使用MySQL日期函数来选择所需的行。 this question或this question中的一种方法应该有用。
例如:
SELECT COUNT(id) FROM clippets WHERE userID = ? AND createdAt >= CURDATE()
答案 1 :(得分:0)
通常,对函数结果进行过滤比对字段进行过滤要慢,特别是对于索引字段。如果您的数据类型包含时间,则过滤器应类似于:
where createdAt >= yourDateVariable
and createdAt < the day after yourDateVariable