0

我有一个包含 10,000 条记录的表(客户)。我想一次修改每一条记录并修改一些数据,然后将其更新回数据库。SELECT * FROM customer 然后 fetchAll 没有意义,因为有 10,000 条记录。

我想在 PHP 中创建一个 while 循环,它执行一个递增的 SELECT 语句,但是如果没有可以很好地递增的稳定主键,像这样的 select 语句会是什么样子?从逻辑上讲,while 循环看起来像:

$row = 1;
while(Number_Rows_In_Table)
{
  $record = $this->db->exec("SELECT * FROM customer WHERE ROW = $row");
  $row++;
  //Do something with the data then update it
}

有没有办法做到这一点?

4

4 回答 4

2

可以使用 MySQL 中可用的 offset、limit 语法……但这似乎是一件奇怪的事情

SELECT * FROM customer LIMIT $row, 1

假设$row从 0 开始并自动递增(如您的示例中所示)。您可能也必须订购它。

于 2012-07-16T15:01:21.110 回答
2

你不必使用 fetchAll 你知道的:

$stmt = $pdo->query("SELECT * FROM `table`");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    //Do stuff with specific rows one a time
}

将比拥有 10,000 个选择查询快得多。我可以向你保证。

于 2012-07-16T15:04:19.727 回答
0

您不必调用fetchAll()并获取所有行,只需从SELECT * FROM customer使用fetch().

于 2012-07-16T15:01:03.113 回答
0

根据您需要更新的内容,您可能只使用 SQL。例如,要查找和替换刺痛:

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
于 2012-07-16T15:06:13.953 回答