sql >> Database >  >> RDS >> Mysql

Werken met bestandsaanwijzers op een csv

  1. Is fgets() het beste om hiervoor te gebruiken? Het is een prima manier om het te doen. Een andere optie is om het hele bestand in een array te lezen met file() , loop dan over de array met foreach() .

  2. Moet ik een terugbelverzoek opnemen? Nee. Voer de query gewoon uit na het lezen van elke reeks regels uit het bestand.

  3. Waar te beginnen? Wanneer de teller de batchgrootte bereikt, voert u de query uit. Zet vervolgens de teller terug op 0 en stel de queryreeks terug naar de beginwaarde. Ten slotte moet u aan het einde van de lus de query uitvoeren met de resterende waarden (tenzij de bestandsgrootte een exact veelvoud was van de batchgrootte, in welk geval er niets overblijft).

$batch_size = 100;
$counter = 0;

//instead of executing query one by one,
//let us prepare 1 SQL query that will insert all values from the batch

$sql_prefix ="INSERT INTO workorderstest(id,parentid,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10) VALUES ";
$values = "";

while (($line = fgets($handle)) !== false) {
    $values .= "($line),";
    $counter++;
    if ($counter == $batch_size) {
        $values = substr($values, 0, strlen($values) - 1);
        $conn->query($sql_prefix . $values) or die($conn->error);
        $counter = 0;
        $values ="";
    }
}
if ($counter > 0) { // Execute the last batch
    $values = substr($values, 0, strlen($values) - 1);
    $conn->query($sql_prefix . $values) or die($conn->error);
}


  1. Meest efficiënte manier in SQL Server om datum te krijgen van datum + tijd?

  2. Kan geen verbinding maken met mysql-server met go en docker - kies tcp 127.0.0.1:3306:verbinden:verbinding geweigerd

  3. lopende balans berekenen in oracle-query

  4. PHP mySQL - Kunt u een bijbehorende array retourneren met een nummerindex?