【问题标题】:MySQL: selecting rows one batch at a time using PHPMySQL:使用 PHP 一次选择一批行
【发布时间】:2012-03-19 20:06:55
【问题描述】:

我尝试做的是我有一个表格来保存用户信息(每个用户一行),我每天运行一个 php 脚本来填写我从用户那里获得的信息。对于一列说A列,如果我找到信息我会填写它,否则我不碰它所以它仍然是NULL。原因是当信息可能可用时,允许它们在下一次更新中更新。

问题是我有太多行要更新,如果我盲目地将 A 列的所有行选择为 NULL,那么结果将不适合内存。如果我一次 SELECT 5000,那么在下一个 SELECT 5000 中我可以获得上次没有更新的相同行,这将是一个无限循环......

有没有人知道如何做到这一点?我没有 ID 列,所以我不能只说 SELECT WHERE ID > X... 有没有不修改表的解决方案(在 MySQL 端或 php 端)?

【问题讨论】:

  • 所以不是规范化的表。你想在什么条件下更新?
  • 请运行SHOW CREATE TABLE mytable\G并将其显示在问题正文中。
  • 有没有可以排序和限制的列?
  • @zod Ya 所以对于所有列 A 为 NULL 的行,我想进行搜索,看看我是否有相关信息。如果我这样做,我会填写该行的A列,否则我不会触摸它。
  • @RolandoMySQLDBA 谢谢你的回复,但很抱歉我宁愿不显示我的表的结构,因为它是我们的生产表。我知道你可能因此无法帮助我,但还是谢谢你:)

标签: php mysql select


【解决方案1】:

您需要使用 LIMIT 和 OFFSET 关键字。

SELECT [stuff] LIMIT 5000 OFFSET 5000;

LIMIT 表示要返回的行数,OFFSET 表示从表中读取的距离。

【讨论】:

  • 这很有趣,所以我必须在每个循环中手动乘以 OFFSET?
  • 不一定。您可以在 OFFSET 中放置一个表达式,例如 5000*page。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多