Autor | Zpráva | ||
---|---|---|---|
Jack06 Profil |
#1 · Zasláno: 24. 11. 2009, 10:17:19
Dobrý den, ještě mě napadlo, zda se dá nějak seřadit pomocí jednoho dotazu několik záznamů pomocí array pole.
Měl bych: ID -- PARENT -- TITLE 1 ------ 0 ------- title 1 2 ------ 1 ------- title 2 3 ------ 1 ------- title 3 4 ------ 1 ------- title 4 5 ------ 0 ------- title 5 6 ------ 2 ------- title 6 7 ------ 2 ------- title 7 8 ------ 2 ------- title 8 9 ------ 5 ------- title 9 Napadlo mě to asi takto, ale nedokážu to realizovat: $pole[ PARENT ] = všechny záznamy, které mají stejného rodiče; a potom výpis: RODIČ: --------- ID, TITLE --------- ID, TITLE --------- ID, TITLE ... RODIČ: --------- ID, TITLE --------- ID, TITLE --------- ID, TITLE .... obdoba tohoto: $data = $db->query("SELECT id,title FROM `table`"); while($d = $data->fetch_assoc()){ print $d['title']; $sub = $db->query("SELECT id, title FROM `table` where (PARENT = '$d[id]' )"); while($s = $sub->fetch_assoc()){ print "---------$s[id], $s[title]"; } } akorád, že by to vlastně mohlo ušetřit geometricky počet připojení na databázi. |
||
Jan Tvrdík Profil |
#2 · Zasláno: 25. 11. 2009, 18:24:27
$dataX = array(); foreach ($data as $key => $item) { $dataX[$item['parent']] = $item; } |
||
Jack06 Profil |
#3 · Zasláno: 26. 11. 2009, 12:03:03 · Upravil/a: Jack06
Jan Tvrdík:
:-( nějako se mi to nedaří.. jak to bude vypadat při tom výběru: $data = $db->query("SELECT id, title, parent_id FROM `table`"); aby se utvořili skupiny array podle parent_id? popřípadě, dá se ještě přidat nějako parametr aby se vědělo že třeba: skupina $dataX['1'] neboli skupina která má rodiče s id 1, tak že ten rodič se jmenuje "jeho název z title" ? chtěl bych to totiž vypisovat poté jako: <a href="?catid=1">Kategorie 1</a> <ul> <li><a href="?catid=1&podkategorie=[id]">Jméno podkategorie (zase to co je v title)</a> .. </ul> hlavní kategorie (rodič má vždy parent_id 0) a podkategorie mají parent_id rovné id rodiče |
||
Majkl578 Profil |
#4 · Zasláno: 26. 11. 2009, 12:18:04
Jack06:
Jak je to se zanořením? |
||
Jack06 Profil |
#5 · Zasláno: 26. 11. 2009, 12:26:10
Majkl578:
Může být pouze jedno to znamená Kategorie - podkategorie další zanoření už není pouze podkategorie ( další záznamy k jednotlivým kategoriím už mám v jiné tabulce ) |
||
Majkl578 Profil |
#6 · Zasláno: 26. 11. 2009, 13:53:04
Nejsem si jistý, jestli tohle bude přesně to co potřebuješ, možná je to zbytečně složité...
$ary = array( array( 'id' => '1', 'parent_id' => '0', 'title' => 'title 1', ), array( 'id' => '2', 'parent_id' => '1', 'title' => 'title 2', ), array( 'id' => '3', 'parent_id' => '1', 'title' => 'title 3', ), array( 'id' => '4', 'parent_id' => '1', 'title' => 'title 4', ), array( 'id' => '5', 'parent_id' => '0', 'title' => 'title 5', ), array( 'id' => '6', 'parent_id' => '2', 'title' => 'title 6', ), array( 'id' => '7', 'parent_id' => '2', 'title' => 'title 7', ), array( 'id' => '8', 'parent_id' => '2', 'title' => 'title 8', ), array( 'id' => '9', 'parent_id' => '5', 'title' => 'title 9', ), ); $sorted = array(); foreach ($ary as $item) { $sorted[$item['id']] = array( 'title' => $item['title'], 'children' => array(), ); if ($item['parent_id']) { $sorted[$item['parent_id']]['children'][$item['id']] = $item['title']; } } var_dump($sorted); //vypis: foreach ($sorted as $item) { echo $item['title'], '<br />'; if ($item['children']) { echo 'children: ', implode(', ', $item['children']), '<br />'; } } |
||
Jack06 Profil |
#7 · Zasláno: 26. 11. 2009, 14:41:14
Majkl578:
A jak ty array získám z while z databáze? mě to vypíše vždycky: A Children: A a nevím jak to napsat :-( $data = $this->db->query("SELECT id, title, parent_id FROM `table` ORDER BY title"); $ary = ''; while ($d = $data->fetch_array()){ $ary .= array('id' => $d['id'], 'parent_id' => $d['parent_id'], 'title' => $d['seo_title']).','; } $ary = array($ary); toto mi vypisuje co jsem psal místo toho co by mělo :-( |
||
Jack06 Profil |
#8 · Zasláno: 26. 11. 2009, 16:53:03
Heh vyřešeno :-D :
$data = $this->db->query("SELECT id, title, parent_id FROM `table` ORDER BY title"); $ary = array(); while ($d = $data->fetch_array()){ array_push($ary, array('id' => $d['id'], 'parent_id' => $d['parent_id'], 'title' => $d['title'])); } |
||
Jack06 Profil |
#9 · Zasláno: 26. 11. 2009, 17:29:05
Majkl578:
Ještě bych měl jeden dotaz: teď mi to vypíše toto: PR kategorie children: PRpodkategorie1, PR podkategorie2 DR kategorie children: DRpodkategorie1, DR podkategorie2 DRpodkategorie1 DRpodkategorie2 PRpodkategorie1 PRpodkategorie2 Prostě vypíše se to do stromu, ale vypíše se to i pod to jako normální seznam všeho. Lze to nějak omezit, aby se už ty podkategorie nevypisovali znovu? |
||
Časová prodleva: 14 let
|
0