Lastige Query (bewerkbaar menu, dat gegevens uit 3 tabellen plukt met één query)
hoe en waarom doet er verder niet toe.. alles gaat tot nu toe voorspoedig.
ik heb zelf alles genormaliseerd (ik heb net 1 jaar php gehad, en een halfjaar mysql).. helaas zit ik op dit moment op vast en ik worstel hier al een dag mee.
het probleem zit hem in samenstellen van het menu met gegevens uit de database, er van uit gaande dat het mogelijk moet zijn om url's, interne pagina's en submenu's te gebruiken, heb ik hiervoor 3 tabellen.
hopelijk verduidelijkt dit plaatje de situatie een beetje:
http://imageshack.us/photo/my-images/338/img20120509140722.jpg/
(let niet op de groene pijl)
zoals je ziet heb ik de volgende tabellen: menu, url en page.
in de tabel menu zie je "sub" staan. dit is bedoeld als volgt:
is dit 0 dan is het een alleenstaand menu (geen submenu), als dit 1 is, is het een submenu van het menu 1.
dan heb je in de tabellen url en page "menuID", dit werkt hetzelfde als "sub" onder de tabel menu, het invullen van "menuID" maakt dit item lid van een hoofdmenu.
hopelijk ben ik nog te volgen,
en uiteindelijk de laatste stap, sorteren d.m.v. de waarde "Rank", deze is te vinden in alle 3 tabellen.
uiteindelijk zal dit dus in een (Html)menuformaat moeten worden uitgevoerd met php, maar het gaat al mis met het samenstellen van de query.
is het mogelijk om uit deze 3 tabellen de volgende gegevens te halen en te sorteren op rank?
ID, Name, (als het een url is, de waarde URL).
en dat in 1 query
(in meerdere query's is geen probleem, maar één query is lastig)?
zo ja, hoe zou ik dit op kunnen lossen?
de inhoud van een submenu word wel met een losse query gedaan.
ps.
ik kwam op dit idee:
SELECT *
FROM menu
JOIN url
JOIN page
ON menu.ID = url.MenuID OR menu.ID = page.MenuID;
maar dat bleek niet te werken.
Gewijzigd op 09/05/2012 14:46:55 door Matthijs Wiersma
just curiouss is het niet makkelijker om je menu' in je ini file te laten zetten en door een stukje php code dit op te halen?
Begrijp niet goed waarom er 3 tabellen zijn. Een url met een naam?
Je kunt het toch in 1 tabel zetten, waarbij je onderscheid maakt tussen hoofdonderwerp en subonderwerp? Zie bv http://www.phphulp.nl/php/forum/topic/menu-met-submenus/84261/
Gewijzigd op 09/05/2012 15:12:22 door Obelix Idefix
@obelix, ik heb gekozen voor URL als tabel omdat het in geen van de andere tabellen paste, gezien het toch mogelijk moet zijn om url's in het menu te plakken met een eigen naam heb ik voor deze methode gekozen.
ik zal trouwens dat topic wat je me net gaf even doorlezen.
edit: ik wil niet dat elk menuknopje een los in te stellen url maakt,
een deel zal ook autmatisch moeten gaan bij het maken van pagina's.
Gewijzigd op 09/05/2012 15:23:27 door Matthijs Wiersma
Kom je o.a. http://www.webmasterworld.com/forum112/162.htm tegen, waar ze uitleggen hoe je drie tabellen kunt joinen.
SELECT url.Name, url.URL, url.Rank, page.Name, page.Rank
FROM `menu`
JOIN `url` ON url.MenuID = menu.ID
JOIN `page` ON page.MenuID = menu.ID
WHERE menu.ID = 1;
al krijg ik als uitvoer:
Name URL Rank Name Rank
URL1 test.nl 3 testpagina 2
URL2 tes2.nl 1 testpagina 2
URL1 test.nl 3 testpagina2 4
URL2 tes2.nl 1 testpagina2 4
zoals je ziet gaat hij wat dubbel, van elke mogelijke combinatie.
is er een betere query, die het misschien onder elkaar zet?
mocht er iemand zijn met en oplossing voor dit probleem dan hoor ik het graag ^^,
met wat php code probeer ik dit hierboven gezond uit elkaar te filteren en dan weer in array's te zetten voor zover dat lukt.
(heb ik het wel mooi in 1 query ipv 3 in mn systeem, dus dat is sws altijd goed.)
Gewijzigd op 10/05/2012 09:45:25 door Matthijs Wiersma