seskupeni 2 tabulek – dibi
- tomasnikl
- Člen | 137
Ahoj,
mam takovy dotaz, lze zapsat v jednom sql dotazu nasledujici:
Bude se to hezky vysvetlovat na prikladu z eshopu. Mam tabulku produktu tricek (id, nazevTricka) a tabulku barev (id, idTricka, nazevBarvy).. a rad bych vypsal neco takovehoto:
Tricko 1 je dostupne v:
- cervena
- modra
- zluta
Tricko 2 je dostupne v:
- ruda
- modra
Tricko 3 je dostupne v:
- cerna
- zluta
data v db by vypadala takto:
tabulka produkty (id, nazevTricka)
85 - Tricko 1
86 - Tricko 2
87 - Tricko 3
tabulka barvy (id, idTricka, nazevBarvy):
1 - 85 - cervena
2 - 85 - modra
3 - 85 - cervena
4 - 86 - ruda
5 - 86 - modra
Lze sestavit takovy dotaz, ktery naplni jen jedno pole, ktere poslu do sablony a budu pres nej iterovat? Vzdy jsem to resil hodne prasacky, kdy jsem si vytahl nejdrive vsechna tricka, a v kazdem prvku iterace jsem se dotazoval do databaze barev, zda toto tricko ma nejake barvy…
Dekuji Vam
- tomasnikl
- Člen | 137
voda napsal(a):
Nejlepší na tohle budeš mít použít Nette\Database (nebo NotORM), kdy si do šablony předáš jen seznam triček a barvy se natáhnou automaticky. Mělo by to vygenerovat jen dva dotazy.
Jinak bych řekl, že u tabulky barvy máš sloupec
id
navíc.
Diky za odpoved, ja jsem celkem rad ze jsem se pohnul z mista, 2 dny jsem se pokousel rozchodim nette a dibi :o) teprve se s tim seznamuju, tak bych nerad dalsi den venoval prechodu na Nette\Database a vse zahodil…
Jinak sloupec id u barev navic nemam.. ono to je hodne jednoduche, takze
kdyz tricko 2 a napr tricko 50 maji stejnou barvu (modrou) tak v databazi ta
modra barva je 2x…:
(id, idTricka, barva)
1 – 2 – modra
2 – 50 – modra
samozrejme by to slo udelat lepe, kdy by nazev barvy byl v db jen jednou a id tricek by se oddelovaly napr carkou… ale toto je jen priklad, ony se tam duplikaty ve skutecnosti snad ani nevyskytuji
a kdyz pote budu chtit smazat barvu u tricka, tak nejjednoduzsi je tam mit nejaky jedinecny sloupec ID, podle ktereho danou barvu smazu (delete from barvy where id=X)
- hAssassin
- Člen | 293
[OT]asi spis slo jen o priklad DB co jsi zde uvadel, ale neodpustim si, spis bych si udelal tabulky ‚barvy‘ se sloupeckem ID a NAZEV a pak tabulku BARVY_PRODUKTU (vztah n:m s tabulkou produkty) kde by byly sloupecky ID_BARVY a ID_PRODUKTU a duplicity by odpadly… ale tohle neni nette ale navrh DB, proto OT:-)[/OT]
- voda
- Člen | 561
Nejřív k id
. Je jedno jestli barva je přímo takle nebo
v tabulce vedle. Ale asi tam nemá být dvakrát stejná kombinace (jako máš
v ukázce s id 1 a 3), takže dvojice (idTriko, barva) je unikátní
(primární klíč), takže sloupec id je zbytečný.
A zpět k dotazu: Můžeš to udělat stejné jako se to děje automaticky v NotOrm a to že nejdřív zeptáš na trika a potom druhým dotazem dotáhneš barvy:
SELECT FROM barvy WHERE idTrika IN(1, 2, 3);
kde místo 1, 2, 3
bude seznam id z prvního dotazu.