WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hämta kategorier från MySQL databas (https://www.wn.se/forum/showthread.php?t=1044634)

Linuus 2010-11-03 15:57

Hämta kategorier från MySQL databas
 
Tjena

Jag har en tabell som innehåller kategorier. Kolumnerna är
id, name, parent_id

De som har parent_id = 0 är ju då sektioner kan man säga som i sin tur har kategorier i sig.

Nu vill jag hämta alla kategorier och skriva ut dom till min meny (superfish) som ska ha följande struktur:
Kod:

<ul>
    <li>Cat1</li>
    <ul>
        <li>Subcat11</li>
        <li>Subcat12</li>
    </ul>

    <li>Cat2</>
    <ul>
        <li>Subcat21</>
        <li>Subcat22</>
    </ul>
</ul>

Men jag lyckas inte få till det.

Tips på hur jag kan göra min SQL-query för att få ett bra svar som är lätt att skriva ut med t.ex. två st foreach. En för grundkategorier och en för underkategorier.

Någon som har tips? :)

abergman 2010-11-03 16:22

Select * from kategorier where parent = 0

Sedan gör du en foreach ($row as $menuitem) där du först skriver ut parent och sedan kör en select * from kategorier where parent = $menuitem['parent'] och skriver ut dessa...

Hoppas du fattade, är lite seg i skallen.

Linuus 2010-11-03 16:24

Tackar.

Tänkte dock om man kunde löst det med en query, men det kanske inte är möjligt? Så man får en array med arrayer så att säga :)

Annars får jag köra som du säger.

rhdf 2010-11-03 18:23

Jo det går att köra EN query, du får helt enkelt joina tabellen med sig själv så att du får ut resultaten nånting i den här stilen
ParentId |ParentKategoriNamn| KategoriId |KategoriNamn

Sen när du loopar ut allt så kollar du om ParentId ändrats, om så är fallet så skriver du ut ParentName och börjar en ny undermeny..

William 2010-11-03 21:32

Citat:

Ursprungligen postat av Linuus (Inlägg 20376495)
Tackar.

Tänkte dock om man kunde löst det med en query, men det kanske inte är möjligt? Så man får en array med arrayer så att säga :)

Annars får jag köra som du säger.

Det blir nog lättast att göra som abergman skrev, enligt mig i alla fall.

emilv 2010-11-03 21:55

Här är en bra artikel om hierarkiska datastrukturer i MySQL (och andra SQL-databaser för den delen):
http://dev.mysql.com/tech-resources/...ical-data.html

Artikeln har flera olika förslag på tabellupplägg och frågor.

rhdf 2010-11-04 01:35

Citat:

Ursprungligen postat av William (Inlägg 20376527)
Det blir nog lättast att göra som abergman skrev, enligt mig i alla fall.

Ja om man tycker om att hamra databasen med queries ;)

vad är mest resurs-snålt?
a) Köra 1 +X querys mot databasen, där X är antalet huvudkategorier
b) köra 1 query och låta koden hantera sorterandet

Magnus_A 2010-11-04 08:54

Det blir ungefär samma antal frågor ändå med alla joins. Bättre att databasen får jobba än att du ska dra logiken i php, definitivt mer resurskrävande.

Vill du spara databaskraft ska du cacha databasuppslaget, då blir det inga frågor alls. :)

abergman 2010-11-04 09:04

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20376558)
Det blir ungefär samma antal frågor ändå med alla joins. Bättre att databasen får jobba än att du ska dra logiken i php, definitivt mer resurskrävande.

Vill du spara databaskraft ska du cacha databasuppslaget, då blir det inga frågor alls. :)

Håller med dig där, databasmotorn jobbar fan så mycket snabbare än php.

Jake.Nu 2010-11-04 12:11

Det behövs ingen direkt logik eller fler än en databasfråga.
En simpel rekursiv funktion som skriver ut menyn som är lagrad i en array.


Alla tider är GMT +2. Klockan är nu 01:36.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson