php - PHP 中 MySQL 的分页结果

标签 php mysql pagination

直到最近我才真正将此(分页)视为一个问题。当我坐下来专注于它时,我发现自己面临着很多问题。

我喜欢的是一个基本的联系人管理系统,用户可以在其中添加/更新/删除/搜索联系人。搜索部分是我需要有效实现分页的地方。

我的想法(+ve 和 -ve 点)

  • 我可以在 POST 我的 search.php 页面时指定 pageNooffset。该页面将触发一个简单的 MySQL 查询来检索结果。由于行数几乎可以达到数千行,因此我需要对其进行分页。非常简单,但我需要为每个不同的页面一次又一次地触发相同 查询。这意味着,当用户从 page1 转到 page2 时,将触发相同的 MySQL 查询(当然使用不同的 offset),这是我觉得多余的事情,并且正在努力避免。<
  • 然后我想捕获整个结果集,并将其存储到$_SESSION中,但在这种情况下,如果结果很大怎么办?它会以任何方式影响性能吗?
  • 在类似第二点的问题上,我想到将结果写到一个文件中,这简直是废话! (我只是把它放在这里,作为一个要点。我知道这是非常糟糕的做事方式。)

我的问题:

一个。我实现上述哪些方法?哪一个更好?还有其他方法吗?我用谷歌搜索了一下,但我发现大多数示例都遵循上面的第 1 点。

B。我对第 1 点的问题:我们如何依赖 mysql 结果的顺序?假设,用户在一段时间后导航到 page2,我们如何确定,在第二次,第一页的记录没有重复? (因为,我们正在做一个新的查询)..

C。到底什么是 MySQL 资源?我知道 mysql_query(..) 返回一个 resource。从某种意义上说,它是全局的吗,它维护对 PHP 脚本的不同调用之间的状态? (我可以在 $_SESSION 中维护资源)。

感谢一百万! :-)

PS:我知道这是一个很长的问题。我只是试图以简洁的方式表达我脑海中的想法。

最佳答案

使用您的第一个建议。有抵消的那个。这是进行分页的“标准”方式。将整个结果集放入 session 中不是一个好主意,因为每个用户都会有自己的私有(private)数据副本。如果遇到性能问题,您始终可以添加缓存 (memcache),这将使所有访问数据的用户受益。

MySQL 将始终以相同的方式生成您的数据。第 1 页上的记录出现在第 2 页上的唯一方法是在用户从第 1 页导航到第 2 页之间插入一条新记录。换句话说:您无需担心。

在 MySQL 中,资源是指向结果集的指针。然后您可以对其进行操作(逐行获取数据,计算返回的行数等)。它不是全局性的。

关于php - PHP 中 MySQL 的分页结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056101/

相关文章:

php - MySQL5.6 vs Percona 5.7 隐式转换问题

php - WooCommerce:如何在非管理员的添加新产品页面中隐藏自定义字段

sql - MySQL 中的两个左连接和一个联合

pagination - 我可以对 $wpdb 类使用分页吗?

Codeigniter分页错误404

python - 我怎样才能让 Selenium 点击 "Next"按钮直到它不再可能?

php - UNION SELECTs - 循环?或单一查询?

php - 如何从 mysql select 中分离结果

mysql - 如何更改 Amazon LightSales 中字符集服务器的属性?

mysql - SQL 连接多个表