我正在构建一个用户在一天(或给定的时间范围)具有各种任务的时间表显示
现在,我通过一次选择当天分配的所有用户,循环遍历他们,并在每个循环中选择用户当天可能有的所有任务来实现这一点。
main选择
SELECT u.id, u.name
FROM users u, assignments a, events e
WHERE u.id = a.u_id AND a.e_id = e.id AND e.date = '{DATE}'
GROUP BY u.id主select的每个循环中的select
SELECT e.title, e.date
FROM assignments a LEFT JOIN events e ON e.id = a.e_id
WHERE a.u_id = {u.id_FROM_SELECT_ABOVE} AND e.date = '{DATE}'这可以在一个性能更好的select中实现吗?有时,时间表可能每天有数百个用户,每个用户都有几个任务,而事件和任务表中有数万条记录。我正在用PHP做这件事
发布于 2020-11-21 00:25:13
优化器应该能很好地处理这个查询:
SELECT e.title, e.date
FROM assignments a LEFT JOIN events e ON e.id = a.e_id
WHERE a.u_id in (
SELECT u.id
FROM users u, assignments a, events e
WHERE u.id = a.u_id
AND a.e_id = e.id
AND e.date = '{DATE}'
GROUP BY u.id
)
AND e.date = '{DATE}'https://stackoverflow.com/questions/64932924
复制相似问题