Autor Zpráva
TomHO
Profil *
Mám tabulku, kde vypisuju něco, dejme tomu zakázky. Každá zakázka má přiřazeno několik souborů, dejme tomu pět.

Tabulky vypadají takto:

zakazky:
ID ... ...

soubory:
ID .. IDzakazky .. filecode .. filename

filecode je prostě textový kód, který určuje, co je ten soubor zač, je to pár písmen, třeba "obd"

Hledám způsob, jak tabulku vypsat, napadají mě tři.

1.
Jeden select - zakazky, pak v cyklu pro každý průchod pět selectů, pro každý soubor jeden.
Asi nejhloupější možnost, pouze teoretická, zavrhuju.

2.
Jeden select - zakazky, pak v cyklu pro každý průchod sáhnu jedním selectem pro všechny soubory dané zakázky, filename a filecode souborů nahraju do pole a pak do buněk vytáhnu filename podle jeho filecode.
Tak to mám teď, ale vůbec se mně to nelíbí. Jednak těch vnořených selectů může být až třicet a jednak ta práce s polem je nic moc.

3.
Jeden select a pět joinů - co soubor, to join. Asi nejčistší řešení. Ale váhám nad počtem souborů. Zakázka je ve vývoji a jak postupně roste, dokážu si představit, že bude pro jeden řádek třeba 10 souborů, což by znamenalo deset joinů.

Takže otázka zní: bude rozumnější deset joinů, nebo pro každý řádek jeden select, vytvoření pole a vyhledání filename pro každý filetype?
TomHO
Profil *
Upřasnění varianty 2: Třicet vnořených selectů .. tím jsem myslel případ, kdy tabulka bude mít 30 řádků, což je maximum, protože výpis stránkuju.
tiso
Profil
Jeden select s jedným JOINom:
SELECT zakazky.*, soubory.filecode, soubory.filename FROM zakazky JOIN soubory on zakazky.ID=soubory.IDzakazky ...;

(pokračuje WHERE, ORDER, ...)
TomHO
Profil *
tiso
on už ten hlavní SELECT je dost složitý a pár podmínek a joinů tam je, takže toto mě prostě nenapadlo, ale když o tom teď uvažuju, tak to vypadá docela logicky. Zkusím a uvidím, díky.

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: