[php][mysql] Kategorie ...

0

Witam,

mam tabele z kategoriami
id | parent_id | title
kategoria główna ma parent_id=0

jak wyświetlić w <option> wszystkie kategorie i podkategorie tak aby podkategorie były pod swoimi kategoriami, nie używając kilu pętli.

1
$sql = 'SELECT id, name, parent FROM tree ORDER parent';
$result = mysql_query($sql);

$tree = array();
while ($row = mysql_fetch_assoc($result))
{
	if (!$row['parent'])
	{
		$tree[$row['id']] = $row;
	}
	else
	{
		if (!isset($tree[$row['parent']]['children']))
		{
			$tree[$row['parent']]['children'] = array();
		}

		$tree[$row['parent']]['children'] = $row;
	}
}

I teraz mamy uporzadkowane dane w prawidlowej kolejnosci. Teraz musisz uzyc drugiej petli, aby wyswietlic te dane. Lecz nie wiem, czy to Cie satysfakcjonuje, bo napisales, ze nie chcesz uzywac kilku petel. Moze jeszcze dzisiaj na 4programmers.net opublikuje artykul o podejsciu do drzew w MySQL.

0

Jezeli jestes zainteresowany tematem: tutaj opis w jaki sposob funkcjonalnosc drzew (na podstawie modelu adacency list, czyli cos takiego jak Ty wykorzystujesz) jest wykorzystywana w serwisie 4programmers.net: http://4programmers.net/Z_pogranicza/Zaawansowane_drzewa_w_MySQL

0

Dzięki wielkie za pomoc ! Artykuł jest świetny jednak najlepszy będzie dla mnie sposób, który tu umieściłeś.

0

Kod zawierał kilka malutkich błędzików, umieszczam tutaj poprawiony wraz z wyświetlaniem kategorii


$c = mysql_query('SELECT `id`, `title`, `parent_id` FROM `category` ORDER BY `parent_id` ') or die(mysql_error());


/*CATEGORY*/
$tree = array();
while ($row = mysql_fetch_assoc($c))
{
        if (!$row['parent_id'])
        {
                $tree[$row['id']] = $row;
        }
        else
        {
                if (!isset($tree[$row['parent_id']]['children']))
                {
                        $tree[$row['parent_id']]['children'] = array();
                }

                $tree[$row['parent_id']]['children'][] = $row;
				
        }
		}

foreach($tree as $v)
{
echo $v['title'].'<br/>'; foreach($v['children'] as $v){ echo'-----------------'.$v['title'].'<br>';} 

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1