Lastige Query (bewerkbaar menu, dat gegevens uit 3 tabellen plukt met één query)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs Wiersma

Matthijs Wiersma

09/05/2012 14:45:52
Quote Anchor link
Voor mijn stage ben ik bezig met het maken van een (simpel) cms-systeem,
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
 
PHP hulp

PHP hulp

08/11/2024 19:02:09
 
Reshad F

Reshad F

09/05/2012 15:06:48
Quote Anchor link
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?
 
Obelix Idefix

Obelix Idefix

09/05/2012 15:11:06
Quote Anchor link
In je ini file??

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
 
Matthijs Wiersma

Matthijs Wiersma

09/05/2012 15:18:02
Quote Anchor link
ik heb nooit gedacht om mijn menu in een ini bestand te zetten, en ik zie dat ook niet helemaal zitten, gezien het waarschijnlijk nog omslachtiger zou worden ;)

@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
 
Obelix Idefix

Obelix Idefix

09/05/2012 15:31:42
Quote Anchor link
Zoek eens met google op mysql join multiple tables

Kom je o.a. http://www.webmasterworld.com/forum112/162.htm tegen, waar ze uitleggen hoe je drie tabellen kunt joinen.
 
Matthijs Wiersma

Matthijs Wiersma

10/05/2012 09:39:07
Quote Anchor link
ik heb al een manier / query gemaakt die werkt, maar ik kan op deze manier niet gebruik maken van submenu's gezien je niet kan joinen naar het menu waar je vandaan komt bij "from".. (submenu's komen dan wss ook in een eigen tabelletje, wel een hoop tabellen maar goed, in dit geval zal het niet zo uitmaken.)

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.