簡體   English   中英

有沒有使用for循環插入多個查詢的替代方法

[英]is there an alternate to using a for loop to insert multiple queries

我想從數組中插入數據。 下面是一個示例情況。

我從朋友列表(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

請參閱此查詢,希望這將提高我們的代碼和速度。

避免在循環中執行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);

  }

您可以將數據合並到一個數據庫查詢中,而不必使用循環。

$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);

一次插入多行。 這個例子

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以生成多行數據,並在最后添加多行后發出單個插入

$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堆疊為字符串,然后通過僅調用一次查詢函數來運行它們。 那應該加快過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM