MySQL CASE

Školení, která pořádám

V MySQL je k dispozici několik primitivních funkcí pro řízení běhu. Kromě poměrně běžných IF, IFNULL a NULLIF je to i mírně složitější konstrukce CASE. Kde se dá tato konstrukce použít? Např. pro získání ceny zboží v nákupním košíku:

<?php
/** Použití: "CASE id" . make_when($array) . " END"
* @param array klíče jsou ošetřené podmínky, hodnoty ošetřené výsledky
* @return string vytvořená podmínka pro SQL konstrukci CASE
*/
function make_when($array) {
    $return = "";
    foreach ((array) $array as $key => $val) {
        $return .= " WHEN $key THEN $val";
    }
    return $return;
}

if ($_SESSION["kosik"]) {
    mysql_query("
        SELECT SUM(cena * CASE id" . make_when($_SESSION["kosik"]) . " END)
        FROM zbozi
        WHERE id IN (" . implode(", ", array_keys($_SESSION["kosik"])) . ")
    ");
}
?>

Pole $_SESSION["kosik"] použité pro nákupní košík v klíčích obsahuje ID zboží a v hodnotách požadovaný počet kusů. Cena každého zboží se vynásobí počtem kusů v košíku, takže celkový součet odpovídá hodnotě košíku.

Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.

Jakub Vrána, Výuka, 8.2.2006, diskuse: 0 (nové: 0)

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.