我有一个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。您需要精确的算法才能每次都获得相同的结果。这只是这种算法的示例:
在这种情况下,我们总是可以选择单个而不是随机的下一个(上一个)帖子。
-- 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] 删除。
我来说两句