Autor | Zpráva | ||
---|---|---|---|
nowis Profil |
#1 · Zasláno: 7. 9. 2014, 21:07:32
Zdravím,
svůj dlouhý dotaz, na kterém pracuji asi hodinu jsem zkrátil na ukázku: SELECT poptavky.aktivni as aktivni FROM poptavky UNION SELECT 'on' as aktivni FROM nabidky WHERE aktivni = 'on' Dělám to tak proto, že potřebuji doplnit sloupec, který v tabulce poptvky neexistuje (všechny nabídky jsou vždy "on" takže není potřebný) Proč mi prosím nefunguje WHERE? Vyhodí to chybu že to nezná sloupec "aktivni" Když dám WHERE pryč, tak to tabulku vypíše správně. Děkuji |
||
Tori Profil |
Pokud část
where doplňujete dynamicky a zbytek chcete nechat jak je, tak dávejte podmínku až na výsledek celého unionu:
(SELECT .. UNION SELECT ... ) WHERE `aktivni` = 'on' Jinak by bylo efektivnější použít podmínku tam, kde databáze může využít indexy: SELECT .. FROM poptavky WHERE aktivni = 'on' UNION SELECT .. FROM nabidky -- bez téhle podmínky |
||
nowis Profil |
#3 · Zasláno: 7. 9. 2014, 22:20:26
Děkuji. To bude asi opravdu ten problém. Nicméně, když to takto napíšu, je tam nějaký problém se syntaxí. Můžu vás poprosit o ještě jedno nakopnutí?
(SELECT poptavky.aktivni as aktivni FROM poptavky UNION SELECT 'on' as aktivni FROM nabidky ) WHERE aktivni = 'on' |
||
Tori Profil |
#4 · Zasláno: 7. 9. 2014, 22:32:31
Můžu poprosit tu chybovou hlášku?
|
||
nowis Profil |
#5 · Zasláno: 7. 9. 2014, 22:42:17
Tori:
jistě: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION SELECT 'on' aktivni FROM nabidky) WHERE aktivni = 'on'' at line 3 |
||
Tori Profil |
Aha jasně. Takhle se dá použít jenom řazení:
(select 1 union select 2) order by , kdežto dodatečné filtrování by se muselo přidat buď do každého selectu (= efektivnější), anebo takhle: select * from (select 1 union select 2) as u where .. (alias pro celý union je nezbytný).
|
||
nowis Profil |
Tori:
Báječné, děkuji! Do každého selectu to dávat nemohu, resp nechci, pak bych to zase musel kostrbatě řešit v php. A o efektivitu v tomto případě zase tolik nejde… Ale budu na to příště myslet :-) |
||
Časová prodleva: 10 let
|
0