php - 我怎样才能让这个查询运行得更快

标签 php mysql

我在我的网站上运行此查询,以便根据特定条件查找待办事项列表。但它运行速度太慢,也许可以用另一种方式来编写它。

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/

相关文章:

php - 等待 PROOPH 中投影创建的读取模型中的新记录

PHP PDO Mysql 插入失败,不抛出异常或错误

php - 我如何更改此脚本,以便当它发现用户存在于 MySQL 数据库中时它会更新并且不返回错误消息?

mysql - 在服务器之间移动数据库时发出问题(找不到 .frm 文件)

MySQL SUM() 始终返回 0 值

sql - MySQL 错误 : ON DUPLICATE KEY UPDATE, 列计数与行的值计数不匹配

php - php 中的 Youtube 视频下载器失败 - 禁止

php - 在wordpress中使用HTML格式的自定义字体

php - MySQL - 内连接 - 添加基于其他值的值的列

mysql - 如何从其他表正确总结为 "Sickness time"- mysql