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
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
Mi háže hybu Incorrect usage of UNION and ORDER BY


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
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.

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