我有两个表如下:
任务:
id int(5) auto_increment,
content mediumtext,
primary key(id)
完成:
id int(10) auto_increment,
taskid int(5),
datetime int(11),
primary key(id)
我正在尝试运行 SQL 查询以提取今天尚未标记为已完成的任务。我正在从 PHP 进行时间计算,所以查询本身看起来像这样:
$morning = mktime(0, 0, 0);
$night = mktime(23, 59, 59);
$query = sprintf("SELECT t.id, t.content FROM tasks as t, completed as c WHERE c.datetime < %s AND c.datetime > %s AND t.id != c.taskid", $night, $morning);
结果如下:
SELECT t.id, t.content FROM tasks as t, completed as c WHERE c.datetime < 1391471999 AND c.datetime > 1391385600 AND t.id != c.taskid
如果有人能给我指出正确的方向,那就太棒了。谢谢:)
最佳答案
使用逗号运算符是 INNER JOINing tables .但是您正在尝试获取任务,这些任务在已完成的表中没有相应的操作,因此您应该使用 LEFT JOIN instead to get those .您还应该使用 MySQL 日期时间比较,因为它编写的代码更少,而且您不必一直计算时区。
我想您在表中没有完成 future 日期的任务。
SELECT t.id, t.content
FROM tasks as t
LEFT JOIN completed as c ON t.id = c.taskid
WHERE c.datetime < 1391385600
OR c.datetime >= 1391472000
OR c.taskid IS NULL
选择任务,其中:
- 今天之前完成 1391385600
- 或在未来完成 1391472000
- 或者根本没有完成
关于php - 根据id和timestamp从两个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518307/