"SVERWEIS" per PHP auf Geschwindigkeit trimmen

TOMahawk85

Erfahrenes Mitglied
@Sempervivum
Du hattest tatsächlich den richtigen Riecher. Dem Array die Artikelnummern als Keys zu verpassen war des Rätsels Lösung. Jetzt dauert der Upload der CSV-Dateien länger als die ganze restliche Aktion (Upload + ca. 20.000 Zeilen-CSV nur ca. 20 Sekunden).

Vielen Dank für den, wie so oft, einfachen aber durchschlagskräftigen Denkanstoß.

Danke natürlich auch an alle anderen, die sich mit meinem Problem beschäftigt und Lösungsvorschläge haben.


Hier noch der jetzt funktionierende Code. Sicher nicht die eleganteste Lösung, aber sie macht, was sie soll.

PHP:
$supplierNameIntern = $_POST['selectImport'];

$supplier = readDatabase('SELECT * FROM admin_suppliers WHERE supplier_name_intern="'.$supplierNameIntern.'"');
$targetNumber = $supplier['supplier_row_manufacturer_number'];
$rowQuantity = $supplier['supplier_row_quantity'];
$targetRow = $supplier['supplier_number_type'];
$supplierName = $supplier['supplier_name'];
$valueInStock = explode(";", $supplier['supplier_value_in_stock']);
$valueLimitedStock = explode(";", $supplier['supplier_value_limited_stock']);
$valueNotInStock = explode(";", $supplier['supplier_value_not_in_stock']);

$arrayRaw = readCsv('temp/',$_FILES['fileUpload']["name"], ';', true);
$sqlArray = readDatabase("SELECT * FROM admin_list_content WHERE supplier='".$supplierName."'");

// LÖSUNG START
foreach($arrayRaw as $value){
    $array[$value[$targetNumber]] = $value;
}
// LÖSUNG ENDE

$tableNames = readDatabase('SHOW COLUMNS FROM admin_list_content');
foreach($tableNames as $title){ $columns .= $title['Field'].', '; }
$columns = substr($columns,0,-2);

$n=0;
foreach($sqlArray as $var){
    $var['supplier_number'];
    $supplierQuantity = $array[$var['supplier_number']][$rowQuantity];
    if(isset($supplierQuantity)){
        switch(true){
            case (in_array($supplierQuantity,$valueInStock)): $quantity = 100;
                break;
            case (in_array($supplierQuantity,$valueLimitedStock)): $quantity = 1;
                break;
            case (in_array($supplierQuantity,$valueNotInStock)): $quantity = 0;
                break;
            default: $quantity = $supplierQuantity;
        }
        $sqlArray[$n]['quantity'] = $quantity;
        $sqlArray[$n]['quantity']==0?$sqlArray[$n]['is_in_stock'] = 'Ausverkauft':$sqlArray[$n]['is_in_stock'] = '';
    }
    
    editDatabase('REPLACE INTO admin_list_content ('.$columns.') VALUES ("'.implode('","', $sqlArray[$n]).'"));');
    $n++;
    unset($content);
}