2016-12-09 2 views
1

У меня есть база данных MySQL с бэкэнд: PHP.Вставить 60000 строк Mysql из PHP

В одной таблице я должен вставить 60 000 строк.

Мы сделали запрос в моем PHP, который возвращает 1000 строк. Для каждой строки мы должны вставить 60 строк. Мы думали, что сделать петлю, но мы не знаем, насколько это оптимально.

Часть кода, вставки данных является:

$turnos = $db->query("SELECT * FROM turno t 
        WHERE t.canchaId = :cancha 
        AND t.fecha BETWEEN :fechaInicio AND :fechaFin 
        AND t.nombre LIKE :cadena 
        ORDER BY t.fecha,t.hora ASC", 
      array("cancha" => $cancha["idCancha"], "fechaInicio" => $fechaInicio, "fechaFin" => $fechaFin, "cadena" => "%turno fijo%")); 
foreach($turnos as $turno) { 
    //turnos have 1000 rows 
    $fecha = date_create($turno["fecha"]); 
    date_add($fecha, date_interval_create_from_date_string('7 days')); 
    $anioAuxiliar = 2017; 

    while(2017 == $anioAuxiliar){ 
     //60 times 
     $data1 = turno[data1]; 
     $data2 = turno[data2]; 
     ... 
     $fechaAGuardar = (String) $fecha->format('Y-m-d'); 
     $result = $db->query("INSERT INTO turno(fechaAGuardar, data2, data3, data4, data5, data6, data7, data8) VALUES(:fechaAGuardar, :data2, :data3, :data4, :data5, :data6, :data7, :data8)", 
     array("fechaAGuardar" => $fechaAGuardar, "data2" => $data2, "data3" => $data3, "data4" => $data4, "data5" => $data5, "data6" => $data6, "data7" => $data7, "data8" => $data8)); 

     date_add($fecha, date_interval_create_from_date_string('7 days')); 
     $anioAuxiliar = (int) $fecha->format("Y"); 
    } 

    $cantidad_turnos = $cantidad_turnos + 1; 
} 

Это РНР в хостинг с PHPMyAdmin.

Так что мои вопросы:

Это самый лучший способ вставить 60000 строк?

Должны ли мы учитывать другие ограничения? (Например: PHPMyAdmin не позволяют вставить эту сумму строк)

Спасибо за помощь мне, любые предложения приветствуются

// EDIT //

Изменение вставки данных, мы нужно вставить дату и время, и для каждого цикла мы должны добавить 7 дней, когда вставлена ​​последняя дата. Поэтому мы не можем использовать вставку с помощью выбора

+0

Пакетная вставка - лучший способ – Elby

+0

Возможный дубликат [Самый быстрый способ вставки массовых данных в базу данных Mysql] (http://stackoverflow.com/questions/15474675/quickest-way-to-insert-mass-data-into -mysql-database) – Elby

+0

Пожалуйста, можете привести пример? Мы не знаем, как сделать файл ванны с mysql. Другие рекомендуют нам использовать пакет. –

ответ

0

Как группа стилей, описанная в комментариях, INSERT/SELECT - это способ, если эти данные находятся в одном сервере/базе данных. Нет необходимости вообще использовать PHP. Ваш комментарий может быть handled with DATE_ADD.

В любом случае, если есть какие-либо другие требования, и вы не можете использовать PHP, рассмотрите возможность использования Bulk Data Loading.

Анализ вашего кода, САМЫЙ ВАЖНЫЙ СОВЕТ будет: не используйте несколько выражений INSERT INTO TABLE. Каждый INSERT INTO вызовет поездку туда и обратно, и все будет очень медленным. Вместо этого, Concat несколько значений с одним INSERT INTO (например, из ссылки):

INSERT INTO yourtable значения (1,2), (5,5), ...;

Удачи вам!

Смежные вопросы