Я хочу вставить данные из массива. Ниже приведен пример ситуации.
Я хватаю всех моих друзей в списке друзей (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 раз.
Чем больше друзей, тем больше времени потребуется для обработки данных.
Есть ли способ избежать этого или повысить производительность кода. ?
Использование PHP с mySQL
Пожалуйста, смотрите этот запрос, надеясь, что это улучшит наш код и скорость.
Избегайте выполнения 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 в строку, а затем запускать их, вызывая функцию запроса только один раз. Это должно ускорить процесс.