Autor Zpráva
Monkeys
Profil *
Neviem si rady.
Tento dotaz mi stale hadze chybu Operand should contain 1 column(s)

$sql = "SELECT (CASE 
            WHEN EXISTS ( SELECT id_sekcie FROM produkty WHERE id_sekcie = {$id_sekcie})
            THEN(
            SELECT s.id_sekcie, s.sekcia, p.id_produktu, p.url_produktu, p.produkt, p.obrazok
            FROM sekcie s
            LEFT JOIN produkty p
            USING(id_sekcie)
            ORDER BY p.datum ASC
            )
            ELSE (
            SELECT sekcia FROM sekcie WHERE id_sekcie = {$id_sekcie}
            )
            END) ";

M.
Kajman
Profil
Nejde vracet dynamicky 6 sloupců nebo 1 sloupec. Nekombinujte dotaz pro výpis produktů a pro zjištění názvu sekce.
Monkeys
Profil *
Kajman:
No cielom je ze ak existuje id sekcie v tabulke 1 tak pripoj tabulku 2 inak vypis tabulku 2.
WHEN THEN ELSE chapem ako switch case v php.
Ci je to myslene inak ?

vdaka
juriad
Profil
Monkeys:
V SQL obvykle pokládáš jednotlivé dotazy, nicméně pro definice triggerů, procedur a funkcí je možné psát sekvence dotazů. V takových sekvencích je možné používat podmínky a cykly (v MySQL jimi jsou následující: dev.mysql.com/doc/refman/5.0/en/flow-control-statements.html). Dále pak existuje možnost přímo v dotazu manipulovat je jednotlivými hodnotami (například nahradit jinou pokud je něco splněno), k tomu slouží jisté funkce/výrazy (v MySQL: dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html).

Použil jsi syntaxi této varianty CASE. Ta funguje jako takový rozšířený ternární výraz v PHP s více možnými alternativami. Vždy musí vracet jen a právě jednu hodnotu.

To, o co se snažíš jde přímo proti filosofii SQL. Polož dva dotazy - napřed pro zjištění existence sekce a druhý pak pro to, co tě zajímá. Neexistuje šance, jak to udělat jedním dotazem, ani to není záměrem.

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