| Autor | Zpráva | ||
|---|---|---|---|
| pastikar Profil * |
Zdravím,
potřebuji poradit - potřebuji získat všechny "nadřazené referenty" vybraného uživatele, tedy např. vyberu uživatele 9 a ten má "referenta" uživatele s ID 5, a ten má zase referenta s ID 4, ten má zase referenta s ID 1..a potřebuji prostě získat z databáze všechny nadřazené ID.. userid jmeno referent ---------------------------------------------- 1 adolf 0 2 karel 0 3 demeter 1 4 lojza 1 5 paja 4 6 vajcak 4 7 tadeas 5 8 jirka 5 9 kozel 5 10 ivan 9 11 alex 11 12 koza 0 ziskej_uzivatele od KOZEL(9) ---------------------------------------------- Moderátor Majkl578: Přesunuto z Kategorie PHP.
|
||
| Majkl578 Profil |
#2 · Zasláno: 2. 4. 2013, 22:48:44
Pro ukládání a manipulaci s takovýmito strukturami se používají pokročilejší techniky, například Traverzování kolem stromu nebo Closure Tree.
|
||
| juriad Profil |
#3 · Zasláno: 2. 4. 2013, 22:50:50
S tvou strukturou se ti to nepovede jedním dotazem. Lze to jen pokud
1) tvoje databáze umí hierarchické selecty (mysql je neumí) nebo 2) hloubka je omezená konstantou (například všichni uživatelé jsou nejhlouběji 5) Jiné reprezentace stromů to umožňují, viz http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back od strany 49. |
||
| pastikar Profil * |
#4 · Zasláno: 3. 4. 2013, 00:22:37
No mám to teď takto, ovšem potřebuji dostat pouze jednoho uživatele ( např. ID 9 ) , a nějak mě nenapadá jak...
$parent_refs = array();
$child_list = array();
$result = mysql_query("SELECT userid, referent, jmeno FROM users ORDER BY jmeno");
while($data = @mysql_fetch_assoc($result)) {
$thisitem = &$parent_refs[ $data['id'] ];
$thisitem['parent_id'] = $data['refent'];
$thisitem['title'] = $data['jmeno'];
$thisitem['id'] = $data['userid'];
if ($data['parent_id'] == $thisitem) {
$child_list[ $data['id'] ] = &$thisitem;
} else {
$parent_refs[ $data['parent_id'] ][ $data['id'] ] = &$thisitem;
}
}
print_r($parent_refs); // vypise vsechny |
||
| Kcko Profil |
#5 · Zasláno: 3. 4. 2013, 13:09:06
Takto?
$q = mysql_query("SELECT * FROM users ORDER BY jmeno");
$tree = array();
while ($row = mysql_fetch_array($q))
{
$tree['parent'][$row["referent"]][] = $row;
$tree['child'][$row['userid']] = $row['referent'];
}
function getAllParents($childId = 0, $tree)
{
$nodes = array();
while (isset($tree['child'][$childId]) > 0)
{
$nodes[] = $childId;
$childId = $tree['child'][$childId];
}
return $nodes;
}
print_r(getAllParents(9, $tree)); |
||
|
Časová prodleva: 13 let
|
|||
0