Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 28. 9. 2015, 19:40:22
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 |
#2 · Zasláno: 28. 9. 2015, 22:26:33
Nejde vracet dynamicky 6 sloupců nebo 1 sloupec. Nekombinujte dotaz pro výpis produktů a pro zjištění názvu sekce.
|
||
Monkeys Profil * |
#3 · Zasláno: 29. 9. 2015, 15:45:53
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 |
#4 · Zasláno: 29. 9. 2015, 16:12:23
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. |
||
Časová prodleva: 8 let
|
0