0

10,000レコードのテーブル(顧客)があります。すべてのレコードを一度に1つずつ変更し、一部のデータを変更してから、データベースに更新し直したいと思います。10,000レコードがあるため、SELECT *FROMcustomerを選択してからfetchAllを実行することは意味がありません。

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で利用可能なオフセット、制限構文を使用できます...しかし、それは奇妙なことのようです

SELECT * FROM customer LIMIT $row, 1

$row0から始まり、自動インクリメントされると仮定します(例のように)。おそらくそれも注文する必要があります。

于 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個のselectクエリを使用するよりもはるかに高速です。私はあなたにそれを保証することができます。

于 2012-07-16T15:04:19.727 に答える
0

すべての行を呼び出して取得する必要はありません。。を使用してクエリfetchAll()から一度に1行をフェッチするだけです。SELECT * FROM customerfetch()

于 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 に答える