sql >> Databasteknik >  >> RDS >> Mysql

Hur infogar man flera rader från array med CodeIgniter-ramverket?

Montering av en INSERT uttalande med flera rader är mycket snabbare i MySQL än en INSERT uttalande per rad.

Som sagt, det låter som att du kan stöta på stränghanteringsproblem i PHP, vilket verkligen är ett algoritmproblem, inte ett språk. I grund och botten, när du arbetar med stora strängar, vill du minimera onödig kopiering. I första hand betyder detta att du vill undvika sammanlänkning. Det snabbaste och mest minneseffektiva sättet att bygga en stor sträng, till exempel för att infoga hundratals rader på en, är att dra fördel av implode() funktion och array-tilldelning.

$sql = array(); 
foreach( $data as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

Fördelen med detta tillvägagångssätt är att du inte kopierar och kopierar om SQL-satsen du hittills har satt ihop med varje sammanlänkning; istället gör PHP detta en gång i implode() påstående. Det här är en stor vinna.

Om du har många kolumner att sätta ihop, och en eller flera är väldigt långa, kan du också bygga en inre loop för att göra samma sak och använda implode() för att tilldela värdesatsen till den yttre arrayen.



  1. N:te maxlön i Oracle

  2. Att få resultatet av dynamisk SQL till en variabel för sql-server

  3. Ändra separator för WM_CONCAT-funktionen för Oracle 11gR2

  4. Finns det någon funktion i oracle som liknar group_concat i mysql?