php - Mysql 分页 - 按 id 或时间?

标签 php mysql

我正在制作一个需要对帖子进行分页的社交应用程序。

这是数据库:

id       | post          | time     | 
---------|---------------|----------|
1        | "oldest"      |  9:00    |
2        | "old"         | 10:00    |
3        | "new"         | 11:00    |
4        | "newest"      | 12:00    |

在我的应用中:

最新的帖子在最上面,我一次只加载 2 个帖子。

假设前 2 个数据已加载到应用中

  • 4 (12:00) newest
  • 3 (11:00) new

用户向下滚动,应用程序检测到已到达最后一篇文章,因此它请求 PHP 文件按以下顺序再下载 2 个:

  • 2 (10:00) old
  • 1 (9:00) older

它工作正常。以下是我的代码:

$qry = $db->prepare('SELECT id, post
  FROM posts
  WHERE id < :lastLoadedId
  ORDER BY time DESC LIMIT 0, 2');

问题/疑问:

我的服务器会自动删除非常旧的帖子(为了节省空间)

假设一段时间后 mysql 表达到了它的限制(最后可用的 id 是 2,147,483,647)

然后我需要从 1 开始重新给 ids:

问题来了

id            | post          | time     | 
--------------|---------------|----------|
1             | "new"         | 11:00    |
2             | "newest"      | 12:00    |
2,147,483,646 | "oldest"      | 9:00     |
2,147,483,647 | "old"         | 10:00    |

前 2 个数据再次加载到我的应用中。

  • 2 (12:00) newest
  • 1 (11:00) new

当它尝试加载更多内容时,它会搜索小于数字 2 的 ID,但由于 2,147,483,647 更大,因此它不会返回“最旧”和“旧”帖子。


我应该担心这个吗?

大公司如何处理如此多的数据?过了一会儿,他们开始了一张新 table ?

最佳答案

根据MySQL官网,unsigned bigint最大可达18446744073709551615,如果24x7每秒插入100万条记录,需要584542年才能达到极限。所以我认为您不必太担心。

这是一个例子:

CREATE TABLE foo (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
)

请注意,20代表要显示的位数,与存储无关。

关于php - Mysql 分页 - 按 id 或时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735780/

相关文章:

php - GuzzleHTTP如何获取请求头

php - MySQL int 字段在 DGNews 命中计数器中自动重置

java - Aspose LINQ 文本修剪

mysql - Sequelize Eager Loading 两个相同的 N :M models one returns data other does not

php - "Compiling php"使其可移植

javascript - JS 函数仅在以管理员身份登录时显示/工作 [Wordpress]

php - 如何创建新的 key 对并将它们保存在文件中?

mysql - 为什么我的 MySQL 查询在我这样做时很快,而在我这样做时却很慢?

mysql - 无法为 3 表 INNER JOIN (MySQL) 找出有效的 SQL - "customers also bought"功能

php - 通过 PHP 进行后台更新?