Autor Zpráva
Jack06
Profil
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
$dataX = array();
foreach ($data as $key => $item) {
    $dataX[$item['parent']] = $item;
}
Jack06
Profil
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
Jack06:
Jak je to se zanořením?
Jack06
Profil
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
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
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
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
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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