【发布时间】:2018-01-02 13:43:11
【问题描述】:
我想显示每个任务的最新操作。这是表(虚拟数据但结构相同):
//t_task
task_id task_name
A1 PC Proc
A2 Printer Proc
A3 Stationery Proc
//t_task_d
task_id assigned_to
A1 John
A1 Sally
A2 John
A3 Sally
//t_act
no act_id act_date task_id
1 C1 2017-07-10 A1
2 C2 2017-07-14 A1
3 C3 2017-07-17 A1
4 C1 2017-07-21 A2
//t_act_d
act_id act_name
C1 Surveying
C2 Contract
C3 Execution
根据上面的表格,我想创建某种报告。这是我的预期输出:
no task_name dates_of_act status
1 PC Proc 2017-07-17 Execution
2 Printer Proc 2017-07-21 Surveying
3 Stationery Proc - Pending /*if it's NULL, then it should be pending, but I can change this in the PHP section*/
这是我最近的当前查询:
SELECT
t_task.task_name,
DATE(t_act.act_date) AS 'dates_of_act',
t_act_d.act_name
FROM t_task
INNER JOIN t_task_d ON t_task.task_id = t_task_d.task_id
LEFT OUTER JOIN t_act ON t_task.task_id = t_act.task_id
LEFT OUTER JOIN t_act_d ON t_act.act_id = t_act_d.act_id
GROUP BY t_task.task_id
ORDER BY t_act.act_date ASC
我的查询结果是:
no task_name dates_of_act status
1 PC Proc 2017-07-10 Surveying
2 Printer Proc 2017-07-21 Surveying
3 Stationery Proc - Pending
注意
我更喜欢速度,因为数据量很大。如果可能的话,我也尽量避免子查询
【问题讨论】:
-
如果你喜欢速度,你应该小心按字段索引你的订单。
-
@HerrNentu' 好吧,我愿意接受任何建议。
标签: php mysql sql sql-server