Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie bazy danych /katalogi
Forum PHP.pl > Forum > PHP
seek
Witam

Mam taki problem chce zrobic mape "katalogow" ktore mam w bazie danych

tabela z bazy wyglada tak.

id ---- nazwa ---- parent_id
1 ---- k1 ---- 0
2 ---- k2 ---- 0
3 ---- pk1 ---- 1
4 ---- pk2 ---- 2
5 ---- ppk1 ---- 4
6 ---- k3 ---- 0

chcialbym wyswietlic sobie teraz tego mape, na stronce.. i tu wlasnie mi sie pojawil problem, nie potrafie tego odpowiednio posortowac..

chodzi mi zeby wyswietlic sobie to w takiej postaci

- k1
-- pk1
-k2
--pk2
---ppk1
-k3

Mam nadzieje, ze z tego co napisalem, mozna zrozumiec o co mi chodzi.
Z gory dziekuje za pomoc
Dravo
ok ok ale wedlug czego chcesz sortowac....questionmark.gif
seek
a wiece generalnie to nie mam pojecia:)

parent_id mowi o tym do ktorego katalogu dane id jest podkatalogiem. Jezeli parent_id jest rowne 0 to jest to katalog glowny.
takie bylo moje zalozenie tworzac ta tabele.

Ale teraz nie wiem jak wyswietlic to w taki sposob ja chce (pisalem wczesniej)
blasiu
Hej!
po pierwsze to jedno pytanie, bo nie wszystko jest jasne...
czy dla wpisu id=5 nie powinno być 'ppk2'?
jeśli tak, to sprawa jest raczej prosta:
dla każdego wpisu (jako $nazwa) mającego id=0
{
1. szukaj takich wpisów (jako $biezacaNazwa), które *kończą* się na $nazwa [fkcja strrpos($biezacaNazwa,$nazwa) ] ;
2. policz ile 'p' znajduje się w $biezacaNazwa [fkcja substr_count($biezacaNazwa,'p') ];
3. otrzymana w 2) liczba oznacza stopień zagnieżdżenia katalogu o nazwie $biezacaNazwa w katalogu $nazwa;
}

Przepraszam że to nie gotowy kod, ale chyba ten zrozumiały jest :]

powodzenia !
seek
Chodzi o to ze te nazwy nie maja znaczenie, beda zupelnie inne nie zwiazane ze soba...

chodzi o to ze jezeli parent_id = 0 to znaczy ze jest to katalog glowny.


jezeli parent_id = 2 to znaczy ze jest to podkatalog katalogu ktorego id=2
marian8
ja zaladowalbym to wszystko do tablicy i skonstruowal taka petle ktora przechodzilaby po wszystkich pozycjach i jak napotka na parent_id=0 to wyswietla nazwe i szuka wszystkich pozycji gdzie parent_id=id (tego przed chwila znalezionego elementu).
Dobre zadanie na rekurencje (ale nie dla mnie rolleyes.gif )

Moze ulatwieniem byloby jeszcze posortowanie tej tablicy wedlug parent_id. Byloby to wszystko wtedy bardziej uporzadkowane...
Dravo
[php:1:15eb9ea4a6]<?php
polacz_db(); //laczymy sie z baza
$w = mysql_query("SELECT id,nazwa FROM twoja_baza WHERE parent_id=0 ORDER BY id");
while($i = mysql_fetch_array($w))
{
$id = $i['id'];
$nazwa = $i['nazwa'];
echo "-$nazwa";//Katalog glowny
$w2 = msyql_query("SELECT nazwa FROM twoja_baza WHERE parent_id='$id' ORDER BY id");
while($i2 = mysql_fetch_array($w2))
{
$nazwa = $i2['nazwa'];
echo "--$nazwa";//podkatalog
}
}
?>[/php:1:15eb9ea4a6]
Zakladamy przy tym ze itenieje struktura tylko i wylaczne : KATALOG GLOWNY , PODKATALOG jesli chcesz glebiej to wystarczy kolejne zapytanie do bazy danych w ostatniej petl;i while.

Rozwiazanie to dziala ale strasznie obciaza baze mozna byloby to zrobic na zasadzie jednego zapytania ktore wzyrsko wyciaga a pozniej tylko to uporzadkowac w tablicy ale mi sie nie chce i nie mam czasu. tongue.gif

UPDATE 1
Mozna tez zaladowac to wzytsko do 2 tablic:
[php:1:15eb9ea4a6]<?
$w = mysql_query("SELECT * FROM twoja baza WHERE parent_id=0");
$w2 = mysql_query("SELECT * FROM twoja baza WHEE parent_id!=0");
?>
[/php:1:15eb9ea4a6]

a poznieij wsyztko to ladni obrobic smile.gif, Jak skjoncze prace moze cos pomoge wiecej biggrin.gif
Pozdro

?>
kszychu
W jednym ze swoich modułów używam czegoś takiego. Przerobiłem to trochę, bo u mnie wyświetla się to w multiselekcie. Oczywiście nie sugeruj się odwołaniami do bazy, robię to przez klasę.
[php:1:84f4e9cb7b]<?php
$sql = "SELECT id, nazwa, parent_id
FROM rodzaj_katategorii
ORDER BY parent_id";
$db->query($sql);
while($db->next_record())
$kategorie[$db->Record['parent_id']][$db->Record['id']] = $db->Record['nazwa'];
if($kategorie[0]) {
while(list($id,$nazwa) = each($kategorie[0])) {
echo "<a href="pokaz.php?id=$id">$nazwa</a>";
if(!count($kategorie["$id"]))
continue;
while(list($chid,$chnazwa) = each($kategorie["$id"])) {
echo "<a href="pokaz.php?id=$chid">- $chnazwa</a>";
}
}
?>[/php:1:84f4e9cb7b]
Dravo
daj kod klasy...
seek
Dravo:

A masz jakis pomysl zeby zapetlic to tak aby byla mozliwosc wyswietlenia struktury bez ograniczen do ilosci podkatalogow?
Najlepiej sortujac jedno zapytanie do bazy biggrin.gif

Pozdrawiam i dzieki za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.