Autor | Zpráva | ||
---|---|---|---|
jataky Profil |
#1 · Zasláno: 5. 11. 2014, 02:04:30
Zdravím, potřeboval bych poradit a nějak si nevím rady.
mám dvě tabulky: 1. vzt_seznam id, label, ponor,par 1,"A",1,NULL 2,REH,2,1 3,ven,3,2 4,sem,3,2 5,PATOL,2,1 6,ven,3,5 7,dovn,3,5 8,JIP,2,1 6,ven,3,8 7,dovn,3,8 2. fil_zmeny datum, id_vzt_seznam 1,2014-01-31,3 2,2013-11-19,3 3,2011-11-19,3 4,2013-02-10,4 5,2011-11-29,4 6,2011-11-19,4 7,2012-02-10,6 8,2014-11-29,6 9,2013-11-19,6 10,2014-01-31,7 11,2013-11-19,7 12,2011-11-19,7 ... a potřebuji tento výpis: REH , 2013-02-10 PATOL, 2014-01-31 (datum jsem získal jako "SELECT id_vzt_seznam, max(datum) as datum FROM fil_zmeny" tímto získám ===> 3,2014-01-31 4,2013-02-10 fil_zmeny.id_vzt_seznam = vzt_seznam.id AND vzt_seznam.id=vzt_seznam.par a z tohoto výběru vyberu nejmenší datum Lze toho docílit vnořeným dotazem do databáze mysql a pokud ano jak? Vím, je to šíleně formulované, ale nevěděl jsem jak bych to jen napsal, aby to bylo srozumitelné. Děkuji za radu. |
||
juriad Profil |
OK máš strom:
A - REH # - - ven * - - sem * - PATOL # - - ven * - - dovn * - JIP - - ven - - dovn Kde každý záznam zná svého rodiče (par) a hloubku (ponor). Dále víme, kdy byly některé záznamy upravované (víme to u těch označených hvězdičkou). A teď nám chybí otázka;.Co chceš v databázi najít? Nejspíš chceš rodiče těch změněných a zajímá tě poslední změna dědí. Je tomu tak? Je dost podstatné, zda se jedná o přímé (děti) nebo nepřímé (vnuky, pravnuky) potomky. Mají všechny větve stromu hloubku právě 3? Jsou ty změněné vždy listy (nejnižší úroveň) v tom stromu? p = parent, c = child, z = zmena SELECT p.label, MAX(z.datum) FROM vzt_seznam p JOIN vzt_seznam c ON c.par = p.id JOIN fil_zmeny z ON z.id_vzt_seznam = c.id GROUP BY p.id # skupinky podle rodice Kdyby tě ale zajímalo víc informací, třeba který potomek má nejvyšší datum, tak to už je třeba řešit vnořeným dotazem. |
||
jataky Profil |
juriad:
Výběr je správný, ale datum výpisu je špatný. V databázi každou změnu u dítěte přidávám pod novým id, čímž musím prvně datum vybrat jako MAX(poslední změna u dítěte) a následně MIN(datum dětí daného rodiče). Snad jsem to napsal aspoň trošku srozumitelně. Jinak strom je správně. |
||
juriad Profil |
jataky:
Aha, ten min-max jsem tam neviděl. SELECT p.label, MIN(zc.datum) FROM vzt_seznam p JOIN ( SELECT MAX(z.datum) AS datum, c.par FROM vzt_seznam c JOIN fil_zmeny z ON z.id_vzt_seznam = c.id GROUP BY c.id # skupinky podle ditete ) zc ON zc.par = p.id GROUP BY p.id # skupinky podle rodice |
||
jataky Profil |
#5 · Zasláno: 5. 11. 2014, 03:47:21
juriad:
... úžasné . Přesně to co jsem potřeboval. Jak složité a nakonec jednoduché. Jsi borec. Díky Moc. |
||
Časová prodleva: 9 let
|
0