| 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ů |
||
|
Časová prodleva: 10 let
|
|||
0