Autor | Zpráva | ||
---|---|---|---|
Petr Ká Profil |
Ahoj, chtěl bych vySELECTovat poslední záznamy z 8smi tabulek jedním dotazem místo osmi. Udělal bych to přes UNION (data, která potřebuji použít jsou stejná ze všech tabulek), ale jak pak ve Smarty poznám o který záznam z jaké tabulky jde, když to do něj pošlu jako klasický result v array()?
Je na to nějaký "fígl"? Děkuji |
||
juriad Profil |
#2 · Zasláno: 23. 10. 2014, 11:31:22
Otázkou je, proč vůbec máš 8 tabulek, když obsahují data stejné povahy.
SELECT 'tab1' AS tabulka, * FROM tab1 UNION ALL SELECT 'tab2' AS tabulka, * FROM tab2 UNION ALL SELECT 'tab3' AS tabulka, * FROM tab3 ... |
||
Petr Ká Profil |
juriad:
'tab2' AS tabulka to me taky napadlo, ale potrebuji z kazde tabulky jen posledni radek.
SELECT id, title, image, 'tab1' AS category FROM `tab1` ORDER BY id DESC LIMIT 1 UNION ALL SELECT id, title, image, 'tab2' AS category FROM `tab2` ORDER BY id DESC LIMIT 1 UNION ALL SELECT id, title, image, 'tab3' AS category FROM `tab3` ORDER BY id DESC LIMIT 1 „Otázkou je, proč vůbec máš 8 tabulek, když obsahují data stejné povahy.“ Protože každá má jiná dodatečná data ale zaklad stejny (id, title, image)... Tady se jedná o SELECT posledních příspěvků na Home Page EDIT: Aha, stačilo dát dotazy do závorek... (SELECT id, title, image, 'tab1' AS category FROM `tab1` ORDER BY id DESC LIMIT 1) UNION ALL (SELECT id, title, image, 'tab2' AS category FROM `tab2` ORDER BY id DESC LIMIT 1) UNION ALL (SELECT id, title, image, 'tab3' AS category FROM `tab3` ORDER BY id DESC LIMIT 1) |
||
juriad Profil |
#4 · Zasláno: 23. 10. 2014, 12:23:14
Jo, přesně tak; dokumentace: „To apply ORDER BY or LIMIT to an individual SELECT, place the clause inside the parentheses that enclose the SELECT: “
|
||
Dusann Profil |
Pokiaľ potrebuješ vypisovať iba spoločné atribúty, tak je lepšie to navrhnúť ako subtypy, nie ?
base ------- id title image type [ENUM(tab1, tab2...)] tab1 ------ tab1colA tab1colB ... fk_base tab2 ------ tab2colA tab2colB ... fk_base tabN... -------- Pre výpis by ti stačilo v tomto prípade iba: SELECT id, title, image, type FROM base WHERE id IN (SELECT MAX(id) FROM base GROUP BY `type`); Tento návrh je flexibilný keďže v prípade zmeny spoločných atribútov ti stačí upraviť iba jednu tabuľku a tieto atribúty sa zbytočne neopakujú v každej tabuľke. Každopádne nepoznám štruktúru a pravidlá tvojej db, takže netuším či je tento návrh pre teba vhodný z hľadiska celkového použitia tvojej db. |
||
Časová prodleva: 10 let
|
0