3 tabele - wybranie poszczególnych rekordów

0

Cześć, mam "mały" problem z zapytaniem do bazy danych i jeśli to możliwe bardzo proszę o pomoc!
Mam 3 tabele z następującymi kolumnami:
tabela main_menu

  • help_index
  • menu_name
  • url_menu_name

tabela submenu

  • help_index
  • menu_name
  • url_menu_name
  • id_main_menu //klucz do tabeli main_menu

tabela articles

  • help_index
  • menu_name
  • url_menu_name
  • id_main_menu //klucz do tabeli main_menu
  • id_submenu //klucz do tabeli submenu

Teraz chcę w jednym zapytaniu pobrać:
menu_name i url_menu_name z każdej z tych tabel z 10 ostatnio dodanych artykułów - by utworzyć link do głównego działu, submenu i do konkretnego artykułu

Obecnie mam tak, ale to pobiera mi tylko nazwy artykułów a nie pobierana nazw submenu i main_menu :(

 
				$query = "
					SELECT art.menu_name as art_name, sub.menu_name as sub_name, main.menu_name as main_name, art.url_menu_name as art_url_name, sub.url_menu_name as sub_url_name, main.url_menu_name as url_main_name
					FROM articles as art, submenu as sub, main_menu as main 
					WHERE art.id_main_menu = main.help_index AND art.id_submenu = sub.help_index AND sub.id_main_menu = main.help_index AND art.active = 1 
					ORDER BY art.date LIMIT $limit OFFSET $index
				";
0

Ok, problem chyba rozwiązany! Zapytanie chyba jest poprawne - błąd był w warunku w PHP :)
Inna sprawa, że zastosowałem JOIN zamiast WHERE, jednak nie jestem jeszcze pewny tych instrukcji (pierwszy raz jej użyłem) więc ogromna prośba o sprawdzenie poniższego zapytania :D
Z góry dziękuję za pomoc i pozdrawiam!

 	$query = "
		SELECT art.menu_name as art_name, sub.menu_name as sub_name, main.menu_name as main_name, art.url_menu_name as art_url_name, sub.url_menu_name as sub_url_name, main.url_menu_name as url_main_name 
		FROM articles as art
		JOIN submenu as sub ON sub.help_index = art.id_submenu 
		JOIN main_menu as main ON main.help_index = art.id_main_menu 
		WHERE art.active = 1 
		ORDER BY art.date LIMIT $limit OFFSET $index
	";				
0

Niestety jednak jest gdzieś błąd :(
Nie potrafię go dokładnie opisać, ale polega on na tym, że jak pobieram dane z bazy danych przy podanym wyżej zapytaniu (niżej go powtórzę) to przy pierwszym wydobyciu danych jest chyba wszystko ok. Przy drugim nazwa artykułu jest taka sama jak poprzednio (czyli źle), subdział jest chyba prawidłowy, a main_menu znowu jest takie jak z poprzedniego wydobycia. Przy kolejnym wydobyciu nazwa artykułu znowu jest taka sama jak przy pierwszym wydobyciu subdział chyba jest prawidłowy a main_menu znowu jest z pierwszego wydobycia... :( Przy 5 wydobyciu nazwa artykułu jest ta co powinna być przy drugim wydobyciu itd... :(

Czy może mi ktoś pomóc zlokalizować błąd? Z góry dziękuję za pomoc i pozdrawiam!

0

W 1 masz:

art.id_main_menu = main.help_index AND art.id_submenu = sub.help_index AND sub.id_main_menu = main.help_index

a w drugim

sub.help_index = art.id_submenu 

i

main.help_index = art.id_main_menu 

Czyli dwa. Jednego ci brakuje.

0
Marcin.Miga napisał(a):

W 1 masz:

art.id_main_menu = main.help_index AND art.id_submenu = sub.help_index AND sub.id_main_menu = main.help_index

a w drugim

sub.help_index = art.id_submenu 

i

main.help_index = art.id_main_menu 

Czyli dwa. Jednego ci brakuje.

RACJA!!!
Dziękuję Ci ślicznie!!! wygląda na to, że już działa jak należy! :)
pozdrawiam!

0

Czyli na wszelki wypadek brakowało tylko 1 w submenu tak? czyli powinno być tak:

$query = "
	SELECT art.menu_name as art_name, sub.menu_name as sub_name, main.menu_name as main_name, art.url_menu_name as url_art_name, sub.url_menu_name as url_sub_name, main.url_menu_name as url_main_name 
	FROM articles as art
	LEFT JOIN submenu as sub ON sub.help_index = art.id_submenu AND sub.id_main_menu = art.id_main_menu 
	LEFT JOIN main_menu as main ON main.help_index = art.id_main_menu 
	WHERE art.active = 1 ORDER BY art.date DESC 
	LIMIT $limit OFFSET $index
";				

pozdrawiam

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