14. juni 2011 - 13:27Der er
5 kommentarer og 1 løsning
fetch sql i samme tabel
Hejsa.
Jeg er ved at lave en oversigt over alle de sider der er oprettet i min database. I oversigten er der:
Navn Tilhørende menu (kategori like) Tilhørende undermenu (submenu like)
Min SQL sætning ser således ud: SELECT * FROM mh_menu INNER JOIN mh_menu_cat ON menu_catid=menucat_id
Nu har jeg i tabellen mh_menu en række der hedder parent, der jo bestemmer hvilken anden menu den oprettede side hører til. Hvordan får jeg parent og id matchet korrekt sammen nu når det er samme tabel?
Spørg endelig hvis jeg taler russisk, det er jo nemt nok at forstå når jeg selv kender problemet. Ved godt min sql sætning ikke er performance optimeret, det er blot for at illustrere :)
Lidt russisk er det nu. Det at du har 'en række der hedder parent' lyder lidt mystisk. Jeg ville have forventet at det ville være en kolonne-felt. Jeg foreslår, at du viser opbygningen af de to tabeller, hvilke felter der er med hvilke datatyper.
Jeg har stadig nogle spørgsmål. Jeg går ud fra at menu_parent er fremmednøgle til menu_id, således at hvis du har en menu med label 'home' og en undermenu til 'home' der hedder 'contact', begge i category 7, så kunne mh_menu for eksempel se således ud:
1 7 home NULL 2 7 CONTACT 1
Altså home har ingen parent, og derfor er menu_parent fyldt ud med NULL.
Hvad er det så du vil have skrevet ud for hver menu? Hvis du for hver menu vil have dens id, label, categorynavn, og navnet på parent menuen, så skulle denne query virke:
SELECT m1.menu_id, m1.menu_label, c.menucat_name, m2.menu_label AS parent FROM mh_menu m1 JOIN mh_menu_cat c ON m1.menu_catid = c.menucat_id LEFT JOIN mh.menu m2 ON m1.menu_parent = m2.menu_id
Fordi du søger to ting i mh_menu, så forekommer tabellen to gange i forespørgslen. For at gøre forespørgslen mere oversigtelig, har jeg givet tabellerne aliases (øgenavne), og mh_menu har således to forskellige aliaser, en for hver gang tabellen bliver brugt. For at gøre udskriften tydeligere kalder jeg parent menuens menu_labelen for parent.
Så er det udenfor sp+ørgsmålet, men jeg kan ikke dy mig for at spørge hvad der står i menucat_menuid? Forhåbenlig ikke en fremmednøgle (henvisning) til menu_id. Det ville give cirkel-henvisninger du ville have svært ved at bruge og som jeg ikke tror du kan have brug for. Jeg foreslår, at du dropper menucat_menuid.
Ligeledes kunne du gøre det mere oversigtelig ved at vælge simpler navne på dine felter, simpelthen:
mh_menu id, catid, label, parent
mh_menu_cat id, name
Så kan ovenstående forespørgsel forkortes til:
SELECT m1.id, m1.label, c.name, m2.label AS parent from mh_menu m1 HOIN mh_menu_cat c ON m1.catid = c.id LEFT JOIN mh.menu m2 ON m1.parent = m2.id
Undskyld jeg ikke har fået svaret tilbage. Det virkede helt perfekt, og det var lige det jeg havde brug for - Tak for det :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.