Autor Zpráva
wassermann
Profil
zdravím všechny. prosím o pomoc.
nevím si rady s vyhledáním navazujících čísel na hlavní číslo v db.

db:
podcislo hlavni cislo
222 222
333 222
444 222
555 333
666 333
777 333
888 888
101 777

chci vyhledat např. všechny čísla co patří pod hlavní číslo 222.
výsledek by měl vypadat takto: 333, 444 ted vyhledat čísla co patří pod tyto vyhledané 333(555, 666, 777), 444(nic) a pokračovat ve vyhledávání čísel co zase patří pod tyto dvě (555, 666, 777) a tak do nekonečna.

Děkuji za každou radu nebo nasměrování.
Tori
Profil
Pro každou úroveň bude potřeba jeden SQL dotaz a jednotlivé dílčí výsledky spojovat a řadit v PHP. Zvažoval jste uložit to jako strom? (viz seriál http://www.zdrojak.cz/clanky/ukladame-hierarchicka-data-v-databazi-i/ , první díl je to co máte teď, druhý je stromová struktura. Zjednodušuje dohledání všech podřízených položek na jeden dotaz, na druhou stranu se trošku zkomplikují úpravy struktury - při smazání / přidání položky je potřeba přepočítat pořadí všech následujících položek.)
wassermann
Profil
Tori:
Děkuji za nasměrování. Vyřešeno.
wassermann
Profil
Zdravím. Navazuji ještě na předchozí dotaz.
Mám vypis hierarchie (viz.předchozí dotaz). Každé číslo má svou hodnotu(y) v jiné tabulce.
Nemám problém s výpisem hodnot(y) čísla, ale s celkovým sesumováním všech hodnot.

Děkuji za každou radu nebo nasměrování.
Kajman
Profil
wassermann:
sesumováním všech hodnot

Na to se zpravidla využívá agregační funkce sum.
wassermann
Profil
Kajman:
Díky za odpověď.
Funkci SUM znám. Problém mám stím, že když mam while ve funkci tak mám výsledek např.: 1200 500 350 900 0 0 0. Toto jsou sesumované hodnoty čísel. Potřeboval bych sesumovat ještě tento sesumovaný výpis.
Kajman
Profil
Můžete si to sčítat v tom while cyklu, nebo použít group by ... with rollup
wassermann
Profil
Kajman:
Díky za odpověď.
Výsledky 1200 500 350 900 0 0 0 už jsou sesumované ve while.
Výsledek 1200 je od číslá 222 a pak se spustí znovu funkce která najde podčísla od 333 a vysledek je 500 atd.

Nakonec vyřešeno přes druhou funkci kde to sesumuju.
Díky.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: