Prośba o pomoc w optymalizacji skryptu - import CSV do MySQL

0

Witam serdecznie,
Chciałbym prosić o pomoc w optymalizacji poniższego skryptu:

$filename = "baza_ksiazek.csv";
        $handle = fopen("$filename", "r");
        $ilosc = 0;
        while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
            $result = mysql_query("SELECT * FROM cms_produkty WHERE isbn = '$data[1]';", $connection);
            $ilosc_wierszy = mysql_num_rows($result);
            if ($ilosc_wierszy == 0) {
                if ($data['1'] != "") {
                    $nazwakategorii = null;
                    $nazwapodkategorii = null;
                    $idkategorii = null;
                    $idpodkategorii = null;
                    $nazwakategorii = $data['12'];
                    $nazwapodkategorii = $data['13'];
                    
                    if ($nazwakategorii != "") {
                        $result2 = mysql_query("SELECT * FROM cms_kategorie WHERE nazwa = '$nazwakategorii';");
                        if (mysql_num_rows($result2) == 0) {
                            mysql_query("INSERT INTO cms_kategorie (nazwa, enable) VALUES ('$nazwakategorii', '1');");
                            $wynik = mysql_query("SELECT bf_id FROM cms_kategorie WHERE nazwa = '$nazwakategorii' ORDER by bf_id DESC LIMIT 1;;");
                            while ($wartt2 = mysql_fetch_array($wynik)) {
                                $idkategorii = $wartt2['bf_id'];
                            }
                        } else { 
                            $wynik = mysql_query("SELECT bf_id FROM cms_kategorie WHERE nazwa = '$nazwakategorii' ORDER by bf_id DESC LIMIT 1;;");
                            while ($wartt2 = mysql_fetch_array($wynik)) {
                                $idkategorii = $wartt2['bf_id'];
                            }
                        }
                    }
                    
                    //echo $idkategorii."<br/><br/>";
                    
                    if ($nazwapodkategorii != "") {
                        $result3 = mysql_query("SELECT * FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii';");
                        if (mysql_num_rows($result3) == 0) {
                            mysql_query("INSERT INTO cms_podkategorie (nazwa, enable, kategoria) VALUES ('$nazwapodkategorii', '1', '$idkategorii');");
                            //echo "INSERT INTO cms_podkategorie (nazwa, enable, kategoria) VALUES ('$nazwapodkategorii', '1', '$idkategorii');";
                            $wynik = mysql_query("SELECT bf_id FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii' ORDER by bf_id DESC LIMIT 1;;");
                            while ($wartt2 = mysql_fetch_array($wynik)) {
                                $idpodkategorii = $wartt2['bf_id'];
                            }
                        } else { 
                            $wynik = mysql_query("SELECT bf_id FROM cms_podkategorie WHERE nazwa = '$nazwapodkategorii' ORDER by bf_id DESC LIMIT 1;;");
                            while ($wartt2 = mysql_fetch_array($wynik)) {
                                $idpodkategorii = $wartt2['bf_id'];
                            }
                        }
                    }
                    $save = "INSERT INTO cms_produkty (nazwa, obrazek, isbn, cena, autor, wydawca, strony, opis, rok, podatek, cena2, kategoria, grupa, typrekordu, enable) VALUES ('$data[3]', '$data[15]', '$data[1]', '$data[11]', '$data[4]', '$data[5]', '$data[6]', '$data[8]', '$data[7]', '$data[9]', '$data[10]', '$idkategorii', '$idpodkategorii', '1', '1');";
                    //echo $save."<br/><br/>";
                    $save = iconv('ISO-8859-2', 'UTF-8', $save);
                    mysql_query("$save");
                    //$ilosc = $ilosc + 1;
                    if ($ilosc == 100) {
                        die();
                    }
                }
            }
        }
 

Skrypt ma działać w następujący sposób:

  1. sprawdzić czy dany rekord już istnieje w bazie
  2. sprawdzić czy kategoria jest już w bazie - jeśli nie, to dopisać
  3. sprawdzić czy podkategoria jest już w bazie - jeśli nie, to dopisać
  4. jeśli produktu nie ma w bazie - to go dopisujemy....

Skrypt działa... Ale prawdopodobnie da się go bardzo zoptymalizować pod względem wydajności.... :)
Czy mógłbym prosić o pomoc?

0

Spójrz na to z takiej perspektywy, że wykonujesz to samo zapytanie parę razy. Poczytaj też o COUNT w MySQL

1 użytkowników online, w tym zalogowanych: 0, gości: 1