Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Laravel - डुप्लीकेट कुंजी पर बल्क इंसर्ट बड़े डेटा सेट को अपडेट करें

मेरे पास एक समाधान है - यह सुरुचिपूर्ण नहीं है, लेकिन बहुत तेज़ है। 80k रिकॉर्ड के लिए 1.6s। किसी भी बेहतर समाधान की बहुत सराहना की जाएगी।

$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. php . का उपयोग करके छवि को डेटाबेस में अपलोड और संग्रहीत नहीं कर सकता

  2. Laravel (पदानुक्रमित डेटा) पर डेटाबेस से सभी माता-पिता/बाल रिकॉर्ड पुनर्प्राप्त करें

  3. Laravel 5:वफ़ादारी बाधा उल्लंघन:1452 एक चाइल्ड पंक्ति को जोड़ या अद्यतन नहीं कर सकता:एक विदेशी कुंजी बाधा विफल हो जाती है

  4. शामिल हुई क्वेरी लापता रिकॉर्ड

  5. मैं mysql असली एस्केप स्ट्रिंग का उपयोग कैसे करूं?