我有一张表格,用于保存以下数据: id - 自增 令牌 - 随机生成的令牌 when - 生成令牌时的时间戳
我有一个 php 页面,我在其中 POST
令牌值。在该页面上,我正在构建一个将执行两项检查的查询:
我想要做的是将两个条件组合在一个查询中并作为响应:
我知道如何分别检查每个条件,例如检查令牌是否存在(示例被简化,但在现实生活中我使用的是准备好的语句):
SELECT id FROM table WHERE token='$token';
或者如果我知道令牌存在并且我想查看令牌是否是在不到 24 小时前创建的:
SELECT id FROM table WHERE token='$token' AND when > DATE_SUB(NOW(), INTERVAL 24 HOUR) //untested
如何将所有内容合并到一个查询中?这样查询将返回 id/'no token'/'expired' 或者?不幸的是,我不太擅长使用 mysql 自己构建它
答案 0 :(得分:1)
无论如何您都希望返回 1 行,即使表中不存在该令牌。
您可以使用聚合和 CASE
表达式执行此操作:
SELECT
CASE
WHEN MAX(id) IS NULL THEN 'no token'
WHEN MAX(timestamp) < NOW() - INTERVAL 24 HOUR THEN 'expired'
ELSE MAX(id)
END
FROM table
WHERE token = '$token'
查看简化的 demo。