Mysql
 sql >> база данни >  >> RDS >> Mysql

Laravel - Групово вмъкване на дублиран ключ, актуализиране на голям набор от данни

Имам решение - не е елегантно, но много бързо. 1.6s за 80k записи. Всички по-добри решения ще бъдат много оценени.

$allResults = [
    ['id' => 1, 'rank' => 100],
    ['id' => 2, 'rank' => 99],
    ['id' => 3, 'rank' => 102],
    ...
    ['id' => 80000, 'rank' => 3],
];

$rankings = [];
foreach ($allResults as $result) {
    $rankings[] = implode(', ', ['"' . $result['id'] . '"', $result['rank']]);
}

$rankings = Collection::make($rankings);

$rankings->chunk(500)->each(function($ch) {
    $rankingString = '';
    foreach ($ch as $ranking) {
        $rankingString .= '(' . $ranking . '), ';
    }

    $rankingString = rtrim($rankingString, ", ");

    try {
        \DB::insert("INSERT INTO my_rankings (`id`, `rank`) VALUES $rankingString ON DUPLICATE KEY UPDATE `rank`=VALUES(`rank`)");
    } catch (\Exception $e) {
        print_r([$e->getMessage()]);
    }
});


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите стойности, разделени със запетая, от базата данни

  2. MySQL Dump неизвестна опция '-no-beep'

  3. Възможни PDOException грешки (MySQL 5)?

  4. SQL:НЕ В алтернатива за избор на редове въз основа на стойности на *различни* редове?

  5. Как да актуализирате MySql DB с помощта на Flex