Popolare tabella da file .sql

peppeocchi

Utente Attivo
20 Apr 2013
30
0
0
Salve,
ho la necessità di popolare una tabella da un file .sql
Il file .sql è di questo tipo:

Codice:
INSERT INTO TABELLA VALUES (id1,nome1,...);
INSERT INTO TABELLA VALUES (id2,nome2,...);
...

Ora come ora la popolo in questo modo

PHP:
$filesql = "http://www.link.it/file.sql";
$handle = fopen($filesql, "r");

while(!feof($handle)) {
	$query = fgets($handle, 4096);
	if(!$query) break;
	$this->query($query);
}

Il file .sql è di circa 20000 righe.

Vorrei, se possibile, ottimizzare le prestazioni, visto che adesso ci mette circa 5-6 secondi.

Ho da poco (2 giorni) iniziato a smanettare con mysqli, secondo voi potrei migliorare le prestazioni facendo una multi_query su tutto il contenuto del file?

Sono bene accette tutte le possibili soluzioni :)

Grazie
 
fai prima a copiare e incollare il contenuto nel SQL di phpmyadmin o ad usare la funzione "Importa" indicandogli il file dda caricare
 
Il problema è che ho circa 30 file .sql da aggiornare.
In pratica aggiorno la tabella dal file .sql, la copio sulla tabella relativa all'aggiornamento (ne abbiamo parlato sull'altro post qualche ora fa ;) ), svuoto la prima tabella, e la popolo con il prossimo file .slq eccetera.

Quel pezzo di codice viene eseguito con un cron alle 8 del mattino ogni giorno.

Ho separato i cron degli aggiornamenti in diversi file, che aggiornano circa 10 tabelle l'uno.

Per ogni file .sql il tempo di aggiornamento è di 5-6 secondi, moltiplicato per 10 file.sql (più gli altri controlli che faccio) arrivo a circa 65-70 secondi per cron.

Tutto questo per dire che non posso farlo manualmente :)
 
Salve,
ho la necessità di popolare una tabella da un file .sql
Il file .sql è di questo tipo:

Codice:
INSERT INTO TABELLA VALUES (id1,nome1,...);
INSERT INTO TABELLA VALUES (id2,nome2,...);
...

Ora come ora la popolo in questo modo

PHP:
$filesql = "http://www.link.it/file.sql";
$handle = fopen($filesql, "r");

while(!feof($handle)) {
	$query = fgets($handle, 4096);
	if(!$query) break;
	$this->query($query);
}

Il file .sql è di circa 20000 righe.

Vorrei, se possibile, ottimizzare le prestazioni, visto che adesso ci mette circa 5-6 secondi.

Ho da poco (2 giorni) iniziato a smanettare con mysqli, secondo voi potrei migliorare le prestazioni facendo una multi_query su tutto il contenuto del file?

Sono bene accette tutte le possibili soluzioni :)

Grazie


prova con questo script che uso io, funziona molto bene

PHP:
include "connect.php";
$file_content = file('./importa/tabella_1.sql');
$query = "";
foreach($file_content as $sql_line){
  if(trim($sql_line) != "" && strpos($sql_line, "--") === false){
    $query .= $sql_line;
    if (substr(rtrim($query), -1) == ';'){
      $result = mysql_query($query) or die(mysql_error());
      $query = "";
    }
  }
 }
echo "<div>i dati Programma.sql sono stati inseriti </div>";

mysql_close($conn);

Puoi ripetere quest'operazione per ogni file .sql
se invece i file .sql sono tanti ti consiglio questo che ho trovato OTTIMO e anche per grossi file di importazione
Vedi l'allegato bigdump.zip
 

Discussioni simili