seskupeni 2 tabulek – dibi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomasnikl
Člen | 137
+
0
-

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

voda
Člen | 561
+
0
-

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.

tomasnikl
Člen | 137
+
0
-

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
+
0
-

[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
+
0
-

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.

tomasnikl
Člen | 137
+
0
-

ok, diky, vyzkousim