我正在尝试从数据库表中进行选择,如下所示......
id | task | last_run | interval
1 | test-run | 1369715091 | 30
2 | anothertask | 1369715091 | 60
last_run
是unix-time,由脚本在运行时更新。
间隔是需要执行此任务的运行之间的时间。
我需要做的是运行查询,我只选择last_run
+ interval
小于当前时间的任务。
这就是我想出来的......
SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`next_run` > '1369717906')
...但是我收到了错误......
Unknown column 'next_run' in 'where clause'
你有什么想法吗?
答案 0 :(得分:1)
您可以在那里提供这两个名称而不是Alias
SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > 1369717906
,您无法在WHERE
子句中使用别名
可以在查询选择列表中使用别名为列提供不同的名称。您可以使用GROUP BY,ORDER BY或HAVING子句中的别名来引用该列。标准SQL不允许在WHERE子句中引用列别名。强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值
答案 1 :(得分:1)
在查询中使用(last_run+interval)
代替next_run
。
答案 2 :(得分:1)
在where子句中,使用表达式而不是别名:
WHERE last_run + interval > 1369717906
答案 3 :(得分:1)
据我所知,where
条款不能使用别名
所以你有两个选择
重复where子句
中的表达式SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > '1369717906'
或使用可以使用别名的having
SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` HAVING (`next_run` > '1369717906')