gpt4 book ai didi

php - 根据 View 获取下一个和上一个MySQL id

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

我有一个 MySQL 数据库,可以保存帖子 ID、帖子和 View 。我想根据 View 添加下一篇和上一篇文章的链接。

-------------------------------
| Id | Post | views |
-------------------------------
| 1 | Title 01 | 10 |
| 2 | Title 02 | 20 |
| 3 | Title 03 | 5 |
| 4 | Title 04 | 0 |
| 5 | Title 05 | 0 |
| 6 | Title 06 | 0 |
| 7 | Title 06 | 6 |
-------------------------------

所以我尝试以下查询。 $post_id是当前帖子 ID。

// Previous 
SELECT * FROM posts WHERE id>'$post_id' ORDER BY views ASC LIMIT 1

// Next
SELECT * FROM posts WHERE id<'$post_id' ORDER BY views DESC LIMIT 1

以上查询返回错误结果。

// Previous 
SELECT * FROM posts WHERE views>'$views' ORDER BY views ASC LIMIT 1

// Next
SELECT * FROM posts WHERE views<'$views' ORDER BY views DESC LIMIT 1

这些返回结果直到出现零(来 self 上面添加的示例数据),因此我将 where 子句更改为 views>='$views' (上一页)和 views<='$views' (接下来)这会返回错误的结果。

我知道这似乎是一个简单的问题,但我到处搜索都找不到任何东西,通常根据帖子 ID 很容易获得下一篇和上一篇帖子,但 View 根本不起作用。

非常感谢您的时间和回答。

编辑: View 列位于 INT

更多细节。

我的父页面绞车调用 View 有以下查询

SELECT * FROM posts WHERE views DESC LIMIT 10

所以这将输出帖子 ID 的 2,1,7,3,4,5,6当用户单击这些帖子中的任何一个时,它将转到显示完整帖子以及下一个和上一个导航的帖子,因此我希望上一个和下一个导航与父页面的顺序相同,即 2,1,7,3,4,5,6

最佳答案

为了减少导航的随机性,您可以添加按其他字段排序。例如,通过 ID。您需要精确的算法才能每次都得到相同的结果。这只是此类算法的示例:

  1. 按浏览次数降序对帖子进行排序。
  2. 如果两个帖子的观看次数相同,则按 Id 升序对这些帖子进行排序。

在这种情况下,我们始终可以选择单个而不是随机的下一个(上一个)帖子。

-- Previous post
SELECT *
FROM posts
WHERE (views > '$views') OR (views = '$views' AND Id < '$post_id')
ORDER BY views ASC, Id DESC
LIMIT 1;

-- Next post
SELECT *
FROM posts
WHERE (views < '$views') OR (views = '$views' AND Id > '$post_id')
ORDER BY views DESC, Id ASC
LIMIT 1;

此外,您还需要修改父页面上的查询并在此处添加排序:

SELECT * FROM posts ORDER BY views DESC, Id ASC LIMIT 10

注意:

网站可以同时供多个用户使用。而且这种导航在一般情况下不起作用。例如,user1 打开第一篇文章,然后转到下一篇(第二篇)文章。此时,user2 也打开了第一篇帖子,并且它的浏览次数发生了变化。如果 user1 现在转到上一页(第一页),则其上的“下一页”链接可能不会指向第二页。

关于php - 根据 View 获取下一个和上一个MySQL id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759780/

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