1

配列からデータを挿入したい。以下は状況の一例です。

フレンド リスト (fb) で利用可能なすべてのフレンドを取得し、それらを配列に格納します。

name, fbid, birthdayここで、データ ( ) をテーブルに挿入したいと考えています。

現在、以下の for ループを使用してこれを行っていますが、コード例です。

<?php

  $friendsname = $_POST['name'];
  $friendsfbid = $_POST['fbid'];
  $friendsbday = $_POST['birthday'];

  for($i<0;count($friendsfbid);$i++){

     $sql_query  = "INSERT INTO table (fbid, name, birthday) VALUES ('$friendsfbid[$i]','$friendsname[$i]','$friendsbday[$i]') ON DUPLICATE KEY UPDATE fbid='$friendsfbid[$i]', name='$friendsname[$i]', birthday='$friendsbday[$i]'";    

  }

?>

300 人の友達がいる場合、これは 300 回ループします。

友達の数が多いほど、データの処理に時間がかかります。

これを回避する方法、またはコードのパフォーマンスを向上させる方法はありますか。?

MySQL で PHP を使用する

4

3 に答える 3

5

このクエリを参照してください。これにより、コードと速度が向上することを願っています。

ループ内で SQL クエリを実行しない

よくある間違いは、ループ内に SQL クエリを配置することです。これにより、データベースへのラウンドトリップが複数回発生し、スクリプトが大幅に遅くなります。以下の例では、ループを変更して単一の SQL クエリを作成し、すべてのユーザーを一度に挿入できます。

foreach ($userList as $user) {

  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';

  mysql_query($query);

  }

ループを使用する代わりに、データを 1 つのデータベース クエリに結合できます。

$userData = array();

foreach ($userList as $user) {

    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';

}

$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);

mysql_query($query);
于 2013-08-27T07:40:44.287 に答える
2

一度に複数の行を挿入します。この例を参照してください。

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

PHP をループして複数行のデータを生成し、最後に単一の挿入を発行して複数行を追加します。

于 2013-08-27T07:38:42.180 に答える
1
$sql = '';
foreach($friendsfbid as $key => $value){
   $sql .= INSERT INTO table (fbid, name, birthday) VALUES ('$value[$key]','$friendsname[$key]','$friendsbday[$key]') ON DUPLICATE KEY UPDATE fbid='$value[$key]', name='$friendsname[$key]', birthday='$friendsbday[$key]'";
}
mysql_query($sql);

SQL INSERT を文字列にスタックし、クエリ関数を 1 回だけ呼び出すことで実行できます。これにより、プロセスがスピードアップするはずです。

于 2013-08-27T07:47:14.060 に答える