SQL update-ben if vagy már hamarabb?
2013-01-28T22:13:10+01:00
2013-01-28T23:23:12+01:00
2022-07-19T02:02:50+02:00
  • Ez így nem rossz elképzelés:
    $sql = "UPDATE `ghost_account` SET `isk`= isk - $row->ticketPrice WHERE `charID`='{$char}' AND `isk`>=$row->ticketPrice";

    Így pöpec az affected_rows-al meg dobom a hibaüzit. Köszönet.
    Mutasd a teljes hozzászólást!
  • update table set mezo = mezo-1000 where id = xy and mezo >= 1000

    mysqli_affected_rows() ha 0-t terit vissza, nem volt update...
    Mutasd a teljes hozzászólást!
  • Nah most, hogy így leírtam rá is ébredtem egy másik problémára.
    Az ha így vizsgálom:
    $sql = "UPDATE `ghost_account` SET `isk`= IF(`isk`<>0,isk - $row->ticketPrice,`isk`) WHERE `charID`='{$char}'";

    Csak arra az esetre lesz igaz ha a mező értéke éppen 0.
    De mi van akkor, ha a mező értéke 3000 míg amit levonnék az 5000. Gyanús, hogy php-val kéne ezt külön vizsgálnom, hogy mennyi van még a számlán mennyit vonnék le és az nem mehet 0 alá. Vagy tudom ezt vizsgálni SQLben is?
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Érdekelne a véleményetek.
    Amikor a felhasználó lefoglal elemeket melyek x összegbe kerülnek az x összeget vonogatom le az egyenlegéből. Mivel nem szeretnék hitelező bankot játszani, nyilván addig kéne megtehesse míg el nem éri a 0-át. Kérdés, hogy ez vizsgáljam-e kapásból az SQLben magában. Vagy külön lekérdezés a táblára?
    A folyamat amúgy így néz ki:
    Felhasználó katt->ajax ellenőrzés szabad-e még?->nem->Hiba | igen->ajax levonjuk a pénzt

    public function do_balance_math($plusminus,$char,$winid) { switch ($plusminus) { case '+': //Ticket ár lekérdezés $this -> db -> select('ticketPrice'); $q = $this -> db -> where('id' , $winid) -> get('winings'); if ($q -> num_rows() > 0) { $row = $q -> row(); //Update $sql = "UPDATE `ghost_account` SET `isk`= isk + $row->ticketPrice WHERE `charID`='{$char}'"; $this->db->query($sql); } break; case '-': //Ticket ár lekérdezés $this -> db -> select('ticketPrice'); $q = $this -> db -> where('id' , $winid) -> get('winings'); if ($q -> num_rows() > 0) { $row = $q -> row(); //Update $sql = "UPDATE `ghost_account` SET `isk`= isk - $row->ticketPrice WHERE `charID`='{$char}'"; $this->db->query($sql); } break; } }

    Én úgy gondoltam egyszerűbb lenne alapból csak akkor updateben engedni a kivonást, ha az ISK mező értéke !=0
    $sql = "UPDATE `ghost_account` SET `isk`= IF(`isk`<>0,isk - $row->ticketPrice,`isk`) WHERE `charID`='{$char}'";

    Érdemes-e így, vagy legyen egy plusz ajax lekérdezés az alap folyamatba beiktatva ami külön nézi, hogy nem 0-e véletlen az egyenleg és ha igen alapból ne is jusson el az updatehez.

    Ki mit ajánl?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd