根据视图获取下一个和上一个MySQL ID

最大限度

我有一个MySQL数据库,用于保存帖子ID,帖子和视图。我想基于视图添加指向下一个和上一个帖子的链接。

-------------------------------
| 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 

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

我知道这似乎是一个简单的问题,但是我搜索到的地方通常找不到任何东西,根据帖子ID可以很容易地获得下一个和上一个帖子,但是查看起来根本行不通。

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

编辑:视图列在INT

一点点细节。

我的父页面绞盘通话视图有以下查询

SELECT * FROM posts WHERE views DESC LIMIT 10

因此,2,1,7,3,4,5,6当用户单击这些帖子中的任何一个时,它将放出帖子ID ,它将转到显示带有下一个和上一个导航的完整帖子的帖子,因此我希望上一个和下一个导航与父页面的顺序相同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现在转到上一页(第一页),则指向该页上“下一页”的链接可能不会指向第二页。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取下一个DOM元素的ID

获取下一个max(id)

如何在mysql中获取下一个自动增量ID

如何从php中的mysql获取下一个结果(在特定ID之后)

如何在插入MYSQL之前获取下一个自动增量ID

在 mysql 中根据 id 到下一个或上一个值计算行的 over() 子句错误

使用Entity Framework获取特定ID的下一个和上一个实体?

气流:在下一个任务中获取上一个任务ID

获取下一个最低 ID 还是最大 ID?

Postgresql INSERT-自动获取下一个ID?

保存记录前获取下一个ID

存储过程以获取下一个渐进ID

在为 Model Rails 创建对象之前获取下一个对象 ID

Wordpress - 如何获取下一个新帖子 ID

从名称数组中获取下一个可用的ID

在 wordpress foreach 循环中,返回当前行 id 和下一个/上一个行 id

如何获取“上一个ID的排名”中排名下一个的行?

按父级,上一个和下一个ID排序菜单节点

在不知道当前位置的情况下查找上一个/下一个ID(PHP和MySQL)

我想获取下一个将创建但尚未在 laravel 中创建的 ID

如何获取img的下一个ID

MYSQL如何插入下一个列ID

在当前商品ID周围选择N个上一个商品和M个下一个商品

如何存储我从上一个屏幕获得的 lastid 并获取该 id 并在下一个选项卡中单击该 id

如何根据上一个ID在Postgres中找到下一行?

获取下一个和上一个对象的JSON

获取下一个和上一个CakePHP 2的Paginator的URL

学说-获取下一个和上一个记录

MYSQL在设置范围(或下一个可用ID)之间插入ID为ID的值