我在我的网站上运行此查询,以便根据特定条件查找待办事项列表。但它运行速度太慢,也许可以用另一种方式来编写它。
SELECT * FROM lesson WHERE
id IN
(SELECT `lesson_id` FROM `localization_logging`
WHERE `language_id` = 2 AND `action_id` = 1)
AND `id` NOT IN
(SELECT `lesson_id` FROM `localization_logging`
WHERE `language_id` = 2 AND `part_id` = 1 AND `action_id` = 6)
查询的作用是在类(class)表中查找所有类(class)列表名称,然后检查特定任务是否已完成。如果任务在一个待办事项中完成,则在下一个待办事项中显示它。在本例中,操作 1 已完成,但操作 6 尚未完成。
我希望我能解释得足够好。在我的本地计算机上,查询需要 1.8 秒,有时我必须打印多个列表,然后需要列表的 1.8 倍,这使得页面加载速度 super 慢。
最佳答案
将 id 标记为已完成:
SELECT l.*, SUM(ll.action_id=6) completed FROM lesson l
INNER JOIN localization_logging ll ON ll.lesson_id = l.id
WHERE ll.language_id = 2 AND
(
ll.action_id = 1
OR
ll.action_id = 6 AND ll.part_id == 1
)
GROUP BY l.id
现在我们可以用以下内容包装它:
SELECT t.* FROM (...) t WHERE t.completed = 0
关于php - 我怎样才能让这个查询运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895617/