Jak podzielić MENU na tabele w bazie MySQL?

0

Siema.
Nie wiem jak uporządkować strukturę menu na stronie. Userzy wrzucają plik, któremu przypisują kategorie np. Gry PC a następnie z przypisanych pod daną kategorie, podkategorie jak np. Strzelanki.

Wyświetlanie:
** Gry PC**
Strzelanki [1]
Zręcznościowe [3]
Wyścigówki [3]
** Gry XBOX One**
Strzelanki
Zręcznościowe [6]
Wyścigówki [2]
** Filmy **
Dramat [11]
Komedia [1]
Akcja [8]

Nie mam pojęcia jak zorganizować sobie tabele, żeby to działało. Zupełna pustka. Też tak czasem macie?

0

Dobra przyznam się, też tak czasem mam...

3

Mam i ja ;)
Zrobiłbym tabelkę z tymi kategoriami z kolumną określającą rodzica każdej kategorii.

0

Wejdź, zobacz, poczytaj
Zaawansowane drzewa w MySQL

0

Czytałem, ale niewiele mi to dało. Jestem początkujący w PHP, więc szukam prostych rozwiązań. Proszę o wyrozumiałość.
title

 $wynik = mysql_query("SELECT * FROM PLIKI") or die ('Błąd zapytania');

if(mysql_num_rows($wynik) > 0) { 
    while($m = mysql_fetch_assoc($wynik)) { 
         echo '<div style="border: 1px solid #53dfda;">';
	 echo '<div id="cale_MENU" style="border-right: 20px solid #36918d;">';
	 echo '<div id="idkategorii" align="right"><b>'.$m["KATEGORIA"].'</b></div>';
         echo '<div>podkategorie</div>';
	 echo '</div>';
	 echo '</div>';
	}
}	 

Wyświetlić kategorie to nie problem, tylko nie wiem jak wyświetlić podkategorie przypisane do danej kategorii. Próbowałem stworzyć kolejne zapytanie do bazy, ale mi nie wychodzi, bo problemem jest zasięg zmiennych. (Chciałem to wkleić zamiast "podkategorie")

 $wynik = mysql_query("SELECT * FROM PLIKI") or die ('Błąd zapytania');

if(mysql_num_rows($wynik) > 0) { 
    while($m = mysql_fetch_assoc($wynik)) { 
         echo '<div style="border: 1px solid #53dfda;">';
	 echo '<div id="cale_MENU" style="border-right: 20px solid #36918d;">';
	 echo '<div id="idkategorii" align="right"><b>'.$m["KATEGORIA"].'</b></div>';

 $podk = $m["KATEGORIA"];
 $wynik2 = mysql_query("SELECT PODKATEGORIA FROM PLIKI WHERE KATEGORIA = $podk") or die ('Błąd zapytania');
while($podk = mysql_fetch_assoc($wynik2)) { 
         echo '<div>'.$podk[PODKATEGORIA].'</div>';
}
	 echo '</div>';
	 echo '</div>';
	}
}	
0

Odświeżę, bo stoję w miejscu

1

Zadanie domowe opanować bazy danych, bo ta wygląda na źle zaprojektowaną. Jako metoda dostępowa użyj PDO lub mysqli. Przyswoić wiedzę na temat MVC.

Metoda na partyzanta

$wynik = mysql_query("SELECT * FROM PLIKI where PODKATEGORIA is null") or die ('Błąd zapytania');
if(mysql_num_rows($wynik) > 0) { 
    while($m = mysql_fetch_assoc($wynik)) { 		
		echo '<div align="left"><b>'.$m["TYTUL"].'</b></div>';
		$podk = $m["ID"];		
		$wynik1 = mysql_query("SELECT * FROM PLIKI where PODKATEGORIA=".$podk) or die ('Błąd zapytania');
		if(mysql_num_rows($wynik1) > 0) {
			while($p = mysql_fetch_assoc($wynik1)){ 				
				echo '<div align="left" style="padding-left:20px"><b>'.$p["TYTUL"].'</b></div>';
			}
		}		
	} 
}   
1

Ja rozumiem, że to taka zabawa z nami, opisać problem jako banalny i stać w miejscu przez tydzień?

A wystarczy wpisać w google:php mysql menu with submenu

i dostajesz gotowce:
http://stackoverflow.com/questions/12239995/how-to-create-dynamic-menu-with-sub-menu-with-php-mysql

1

Tak na pierwszy rzut oka to jest tylko jedna tabela:
ID
parent_id - id parenta lub NULL
name - nazwa menu
page - adres do strony, która ma się otworzyć po kliknięciu, np:

ID | parent_id | name
---------------- | -------------------
1 | NULL | Gry na PC
2 | 1 | Strzelanki
3 | 1 | Zręcznościowe
4 | NULL | Gry na XBox
5 | 4 | Strzelanki

itd.

0

Wykorzystałem tabelkę Juhasa, kod Reinman'a, trochę poprzerabiałem i wszystko pięknie działa. Jeszcze dodam count do każdej podkategorii i będzie w ogóle świetnie. Bardzo Wam dziękuję. Po prostu nie miałem pojęcia jak się za to zabrać. Robiłem tak wiele różnych kombinacji w bazie, że w końcu się pogubiłem i już nic nie wiedziałem. W tej chwili wszystko jest jasne i już będę wiedział na przyszłość jak rozwiązać taki czy inny, podobny problem.

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