如何一次一行地选择整个数据表


How do I select entire table of data one row at a time?

我有一个包含10000条记录的表(客户)。我想一次修改一条记录,修改一些数据,然后将其更新回数据库。从客户那里选择*FROM然后获取All是没有意义的,因为有10000条记录。

我想在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
}

有办法做到这一点吗?

您不必使用fetchAll您所知道的:

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

这将比10000个选择查询快得多。我可以向你保证。

可以使用偏移量,限制MySQL中可用的语法。。。但做似乎是一件奇怪的事情

SELECT * FROM customer LIMIT $row, 1

假设$row从0开始并自动递增(就像您的示例中一样)。你可能也得点它。

您不必调用fetchAll()并获取所有行,只需使用fetch()SELECT * FROM customer查询中一次获取一行即可。

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

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);