Autor Zpráva
Petr Ká
Profil
Ahoj,

potřeboval bych poradit s UPDATE skladových zásob v databázi na základě selectu. Vím, že v tom UPDATU lze data naJOINnovat a ušetřil bych hodně zbytečných dotazů přes forech, jen mi není moc jasné jak...

PHP funce, kterou bych potřeboval zoptimalizovat:
<?php
function sklad($db, $uid, $product_id,$pocet=1){
    $receptura = $db->execute("SELECT * FROM sklad_receptura WHERE user_id='$uid' AND product_id='$product_id'")->getArray();
    $insert = array();
    foreach($receptura as $r){
        $insert[]="('$r[sklad_id]','$uid', '".time()."',($r[pocet] * $pocet * -1))";
        $db->execute("UPDATE sklad_zasoby SET stav=(stav-($r[pocet] * $pocet)) WHERE id=$r[sklad_id] AND user_id='$uid'");
    }
    $db->execute("INSERT INTO sklad_pohyby (sklad_id, user_id, time, pocet) VALUES ".implode(", ",$insert));
}
?>
Kajman
Profil
Snad půjde něco takového...

UPDATE sklad_zasoby z
       JOIN sklad_receptura
         ON z.id = r.sklad_id
            AND z.user_id = r.user_id
SET    z.stav = z.stav - ( r.pocet * $pocet )
WHERE  r.user_id = $uid
       AND r.product_id = $product_id;

INSERT INTO sklad_pohyby
            (sklad_id,
             user_id,
             time,
             pocet)
SELECT sklad_id,
       user_id,
       Now(), # nebo dosadit výsledek time()
       pocet * $pocet * -1
FROM   sklad_receptura
WHERE  user_id = $uid
       AND product_id = $product_id 
Radek9
Profil
Kajman:
Na druhém řádku ti ještě chybí r.

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:

0