Autor Zpráva
Fic
Profil
Ahoj,
rád bych požádal o radu. Mám následující kód, který má za cíl updatovat množství skladových zásob (avail) v databázi dle počtu objednaných kusů z e-shopu. "is_numeric" jen testuje, o jaké položky jde (s položkami začínající písmenem se pracuje jinak). Problém je, že v minimálně jednom případě k odečtení nedošlo. Byla to zrovna objednávka přes 100 položek - může v tom být problém? Díky moc za jakoukoliv pomoc.

<?php
  public function updateAvailPlants(){
        $query = "UPDATE plants SET avail = CASE";
        $counter=null;
        foreach ($_SESSION['basket'] as $key => $value) {
            if (is_numeric(substr($key, 0, 1))){
                $query .= " WHEN plant_id = $key THEN avail-$value";
                $counter++;
            }
        }
        $query .=   " ELSE avail
                    END";
        if ($counter!=null){
        $this->db_connection->query($query);
        }
        return;
    }
?>    
Kajman
Profil
Probém může být v délce sestaveného dotazu, ten je limitován nastavením serveru či připojení.

Pokud řádky košíku máte uložené, můžete sestavit update dotaz s joinem, který bude mít statickou délku a díky where omezení na změnu jen některých řádků by měl být i rychlejší.

A i když zůstanete u updatu s case, také použijte where, ať se neupdatují všechny řádky v tabulce, viz Hromadná aktualizace záznamů

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: