我试图从MySQL数据库中选择3条随机记录,其中lastUsedDate(记录的最后更新日期)超出了设置的时间段或NULL。

我的逻辑是这样的:


如果lastUsedDate为NULL,则可以选择此记录。
如果lastUsedDate比当前日期早7天或更长时间,
它是要随机选择的候选人。
我想忽略7天以下的约会。


我知道Rand()很慢,但是此表只有30条记录。

SELECT * FROM myTable
WHERE lastUsedDate <= DATE_SUB(CURDATE() ,INTERVAL 7 DAY) OR lastUsedDate IS NULL
ORDER BY RAND()
LIMIT 3


最终,在30天后,由于所有30个用完了,lastUsedDate将不再为NULL。这就是为什么我要在7天后回收行。

有人指出我正确的方向吗?

最佳答案

尝试

SELECT * FROM myTable
WHERE IFNULL(lastUsedDate, '0000-00-00') <= DATE_SUB(CURDATE() ,INTERVAL 7 DAY)
ORDER BY RAND()
LIMIT 3


由于您将其标记为PHP,所以我猜您正在PHP中运行此查询,在这种情况下,为什么不简化查询并在php中做更多

$date_limit = date("Y-m-d", strtotime("-7 days", time()));
$sql = "SELECT * FROM myTable WHERE IFNULL(lastUsedDate, '0000-00-00') <= '$date_limit' ORDER BY RAND() LIMIT 3";


祝好运

关于php - 选择某个日期之前或之后尚未使用的MySQL记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29287048/

10-11 03:17