【发布时间】:2015-07-20 14:45:20
【问题描述】:
我已经使用 PHP 解决了这个问题,但我知道如果我可以查询它会更快。我有以下 2 个表。
projects:
+------------+--------------+
| project_id | project_name |
+------------+--------------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
+------------+--------------+
tasks:
+------------+------------+-------------+---------------------+
| project_id | task_id | task_status | task_due_timestamp |
+------------+------------+-------------+---------------------+
| 1 | 1 | 1 | 2015-01-01 12:00:00 |
| 1 | 2 | 2 | 2015-01-02 12:00:00 |
| 2 | 3 | 3 | 2015-01-03 12:00:00 |
| 3 | 4 | 1 | 2015-01-04 12:00:00 |
+------------+------------+-------------+---------------------+
我需要一个查询来选择所有项目及其关联任务的状态为 1 或 2。它选择的任务必须是最新的。见下表。
records after query:
+------------+--------------+------------+-------------+---------------------+
| project_id | project_name | task_id | task_status | task_due_timestamp |
+------------+--------------+------------+-------------+---------------------+
| 1 | a | 1 | 1 | 2015-01-01 12:00:00 |
| 2 | b | null | null | null |
| 3 | c | 3 | 3 | 2015-01-01 12:00:00 |
| 4 | d | null | null | null |
+------------+--------------+------------+-------------+---------------------+
如您所见,项目 2 不应该有任务,因为任务状态为 2。项目 4 没有项目。项目 1 有 2 个任务,但最早的任务提前了一天。
任何帮助将不胜感激。
【问题讨论】:
-
您如何获得 2015-01-01 12:00:00 记录而不是 2015-01-02 12:00:00?
-
您必须使用 MAX 运算符来获取最近的任务,然后使用 JOIN 来将任务与项目结合起来。使用 WHERE 选择状态 1 或 2
标签: mysql sql codeigniter