FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Mycket flitig postare
|
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> 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? ![]() |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
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. |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Mycket flitig postare
|
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. |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
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.. |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
|||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Bara ett inlägg till!
|
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. |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Flitig postare
|
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 |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Klarade millennium-buggen
|
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. ![]() |
||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Mycket flitig postare
|
Håller med dig där, databasmotorn jobbar fan så mycket snabbare än php.
|
|||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Medlem
|
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. |
||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|