gpt4 book ai didi

mysql - 从 MySQL 中间检索第一条、最后一条和第三条记录的最有效方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 07:05:38 26 4
gpt4 key购买 nike

背景

我有一个显示网络漫画的网页。目前有1622页。我需要显示当前的漫画页面(我有它的 ID),以及第一页、上一页、下一页和最后一页的链接。排序也很重要(由于古怪的数据库设计 - 遗留的东西,所以 ORDER BY 很长),所以我也不能做像“where ID=1”这样的事情。

问题

所以,问题很简单 - 我知道记录的 ID。我执行了一个 SELECT ... FROM ... WHERE ... ORDER BY ... 查询,想要检索第一条记录、最后一条记录、具有我知道的 ID 的记录,以及直接在具有已知 ID 的记录之前和之后的记录。

未经筛选的查询返回超过 1600 行,并且每天都有新行。查询将每秒运行几次(有一个公平的读者群)。什么是最有效的方法?有什么比天真的“获取所有行并过滤掉我在 PHP 代码中需要的内容”更好的了吗?请注意,我知道我可以在 PHP 端缓存结果,但我想知道这里是否有一些与 MySQL 相关的优化可用。

已添加:一种解决方案是执行多个查询 - 每个所需值一个。我应该说我知道它并且正在考虑更优雅的东西。

最佳答案

为什么不添加一个有序且以正确方式排序的 OrderedID 列?您最初可以使用复杂的查询进行填充,然后在添加新页面时保持更新。

如果修改现有表不是一个选项,您可以创建一个只有两列的新表,一个指向您的页面表的 FK 和一个像上面那样的 OrderedID 列?

这意味着对于任何 ID=X 的页面,您都需要 1、X-1、X、X+1 和 Max() - 只有 Max() 实际上需要查询,而且每天只会更改一次。其他的可以直接计算。

关于mysql - 从 MySQL 中间检索第一条、最后一条和第三条记录的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com