![]() |
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> 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? :) |
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. |
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. |
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.. |
Citat:
|
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. |
Citat:
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 |
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. :) |
Citat:
|
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