gpt4 book ai didi

php - 当日期相同时从 MySQL 获取下一个和上一个

转载 作者:行者123 更新时间:2023-11-29 05:16:35 25 4
gpt4 key购买 nike

现在我遇到了一个问题,因为从外部源向我的数据库导入行的速度非常快。

如果创建的多行具有完全相同的发布日期,则无法按日期排序并按顺序滚动浏览帖子。

假设 5 行都是在上午 11:22:04 生成的:

  • 第 1 行 - 上午 11:22:04
  • 第 2 行 - 上午 11:22:04
  • 第 3 行 - 上午 11:22:04
  • 第 4 行 - 上午 11:22:04
  • 第 5 行 - 上午 11:22:04

如果访问者正在查看第 3 行并想要“下一行”,我将要求数据库给我发布晚于或等于上午 11:22:04 的下一行,这将是第 1 行不管我做什么。

  • 如果我不说“或等于”,那就意味着访问者永远看不到第 4 行或第 5 行,这与总是看到第 1 行一样糟糕。
  • 将行 ID 添加到 order by 子句并没有帮助,因为 - 同样 - 它只会给我第 1 行(如果我当前正在查看第 3 行)。
  • where 子句中添加大于或小于没有帮助,因为 - 例如 - 如果我正在查看第 3 行并且我想要“下一个”行但是说ID 需要大于 3,这样我就永远不会得到第 1 行。

我可以通过更新数据库中在同一时间发布的每一行并将行的 ID 作为秒数来欺骗系统,这会将上述记录变成:

  • 第 1 行 - 上午 11:22:01
  • 第 2 行 - 上午 11:22:02
  • 第 3 行 - 上午 11:22:03
  • 第 4 行 - 上午 11:22:04
  • 第 5 行 - 上午 11:22:05

这实际上非常有效。问题是每次管理员导入数据时都会添加新行,我无法不断更新数据库来纠正这个问题。

我获取下一个和上一个的查询如下所示:

// next row
select t.*
from table t
where t.postdate >= '{$current_date}'
and t.postdate < now()
and t.id <> {$current_id}
order by t.postdate
limit 1

// previous row
select t.*
from table t
where t.postdate <= '{$current_date}'
and t.postdate < now()
and t.id <> {$current_id}
order by t.postdate desc
limit 1

(是的,我在谷歌上对此进行了广泛的搜索,并在 Stackoverflow 上回顾了几个类似的问题!)

最佳答案

你能试试这样吗:

// next row
select t.*
from table t
where CONCAT(t.postdate, t.id) >= '{$current_date}{$current_id}'
and t.postdate < now()
and t.id <> {$current_id}
order by t.postdate
limit 1

// previous row
select t.*
from table t
where CONCAT(t.postdate, t.id) <= '{$current_date}{$current_id}'
and t.postdate < now()
and t.id <> {$current_id}
order by t.postdate desc
limit 1

关于php - 当日期相同时从 MySQL 获取下一个和上一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31956196/

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