php - 根据id和timestamp从两个表中选择

标签 php mysql

我有两个表如下:

任务:

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/

相关文章:

php - 使用 simplexml_load_file() 加载压缩的 XML 文件

mysql - 将为日期范围(从、到)指定的值应用于包含每个日期的单行的表中的值

mysql - 在 Sequelize 中使用表变量?

Mysql左连接不使用现有的外键

php - 在 Laravel 5.5 Migrations with Postgres 中定义字段

php - mysql 从单个表中获取好友

php - Lithium:如何从另一个内部调用一个验证过滤器

php - 无法在 laravel 5.2 中使用 Storage::put($file, $content) 保存我的文件

c# - .Net中如何连接mysql数据库

mysql - 对查询返回的列进行排序