Autor | Zpráva | ||
---|---|---|---|
AM_ Profil |
#1 · Zasláno: 21. 6. 2012, 15:21:30
Zdravím,
narazil jsem u MySQL (opět) na syntaktickou obskurnost. Pro vysvětlení - vyvíjím databázový framework, kterým je dotaz vygenerovaný, proto je dotaz tak paranoidně ozávorkovaný a uměle vykonstruovaný pro otestování unionů ve frameworku. Mám následující dotaz: SELECT * FROM (`query_log`) WHERE (`id_query`) = (65) UNION ALL SELECT * FROM (`query_log`) WHERE (`id_query`) = (63) Kolem názvů tabulek jsou závorky proto,že framework na tom místě dosazuje libovolný výraz, který je použitelný v klauzuli FROM, tedy např. vnořený select, další vnořený join atd. Bez unionů to není problém, ale v tomto dotazu dostávám chybu: You have an error in your SQL syntax; ...to use near 'WHERE (`id_query`) = (63)' at line 3 Zvláštnost je v tom, že problém s ozávorkováním názvů tabulek je až ve druhém selectu (za unionem). Tento dotaz: SELECT * FROM (`query_log`) WHERE (`id_query`) = (65) UNION ALL SELECT * FROM `query_log` WHERE (`id_query`) = (63) Můj dotaz tedy zní - uniká mi něco, nebo je to bug v mysql parseru? Jak byste to řešili s přihlédnutím na mou strategii, že raději ozávorkovávám všude, kde by to mohlo být potřeba? Děkuji za odpovědi. |
||
Tori Profil |
AM:
Jaká verze DB a engine tabulky to je? Zkoušela jsem na 5.1.63, verze prot. 10 (tabulka MyISAM) jak přes PMA tak mysql_query, se závorkami i bez, a chybu mi žádnou nehlásilo. Nevím, v čem dalším by mohl být podstatný rozdíl. edit: potvrzuju tuto chybu, projevila se mi v MySQL 5.5.12, ver. protokolu 10, InnoDB i MyISAM. |
||
AM_ Profil |
#3 · Zasláno: 21. 6. 2012, 16:00:50
Verze MySQL: 5.5.9
Verze protokolu: 10 divné, že v novější verzi by to nešlo, ale i to se může stát. Já to mám na engine InnoDB, mám to zcizoklíčované. Ale zkusil jsem si udělat myisam tabulku a problém je pořád stejný, takže to taky nebude ono. |
||
AM_ Profil |
#4 · Zasláno: 21. 6. 2012, 23:03:32
tak po chvíli googlení jsem zjistil, že tento bug existoval ve verzích < 5.0, takže se zřejmě znovu objevil a existuje stále i ve verzi 5.5.25, takže jsem zaslal bug report na web mysql a tím to zatím považuji za uzavřené... ve svém frameworku to holt musím vyřešit tak, aby se tam závorky nevkládaly, pokud to není opravdu nutné :)
|
||
Časová prodleva: 11 let
|
0