10. januar 2003 - 21:51Der er
9 kommentarer og 1 løsning
Kategori funktion
Hej, jeg har en tabel i mysql med følgende felter
id, subid, category
'category' er navnet på kategorien (og sikkert stavet forkert :), og 'subid' er hvilken id den kategori hører under. Hvis jeg nu propper 3 kategorier i tabellen således
id subid category ---- ------- ----------- 1 0 Danmark 2 1 Sjælland 3 2 København
Så er Danmark en overordnet kategori (hører ikke under nogen andre). Under Danmark er sjælland, og under sjælland er så københavn. Håber i kan følge med så vidt :)
Nu er mit problem så, at jeg mangler en funktion som kan tage f.eks kategorien "København", køre ned igennem kategorierne og returnere dette
Danmark -> Sjælland -> København
Den kan jeg desværre ikke lige regne ud, og håber derfor nogen her ved hvordan det gøres bedst.
Desværre skal der være mulighed for et variabelt antal niveauer, jeg kan ikke vide på forhånd om der er 1, 2, 3 eller 20 niveauer (selvom 20 nok er usandsynligt)
dit felt subid fortæller hvilken kategori er 'forelder', så det vil jeg lige kalde den:
id forelder category ---- -------- --------- 1 0 Danmark 2 1 Sjælland 3 2 København
$sql_kommando = " SELECT fff.category as bessefar, ff.category as far, f.category as denne FROM dintabel as f, dintabel as ff, dintabel as fff WHERE f.category = 'københavn' AND ff.id = f.forelder AND fff.id = ff.forelder "; $result = mysql_query( $sql_kommando ) or die( mysql_error() ); extract( mysql_fetch_array( $result ) ); echo "$bessefar --> $far --> $denne<br>";
Hmm... Kom til at tænke på hvordan det er gjort her på eksperten... Hvis man klikker på "opret spørgsmål" får man jo kategorierne listet på samme måde som jeg ønsker at gøre.
Jep, det ser jo ud til at virke :) Men der er en lille ting der generer mig en smule, hvis jeg har f.eks. 2 overordnede kategorier med hver 2 underordnede så bliver resultatet sådan her
Danmark Sverige Danmark -> København Danmark -> Odense Sverige -> Skåne Sverige -> Stockholm
Jeg ville dog helst have det på denne måde
Danmark Danmark -> København Danmark -> Odense Sverige Sverige -> Skåne Sverige -> Stockholm
Hvis det er praktisk muligt altså :) Udover dine 2 funktioner har jeg denne kode, og har forsøgt mig lidt frem med det, men kan ikke lige gennemskue den detalje.
$query = mysql_query( "SELECT id, category FROM categories ORDER BY subid, category ASC" ) ;
det er din "ORDER BY subid, ..." der sørdger for at de linier blot en hovedkategori kommer forrest, de har jo subid = 0.
en mulighed løsning ville være at tilføje et ekstra felt i tabellen sådan at alle categorier der nedstammer fra danmark har 0 i det felt, alle der nedstammer fra sverige har 1 i feltet osv
d subid gruppe category ---- ------- ------- ----------- 1 0 0 Danmark 2 1 0 Sjælland 3 2 0 København 4 0 1 Sverige 5 1 1 Skåne 6 2 1 Stockholm
og så tage feltet gruppe med i din ORDER BY:
$query = mysql_query( "SELECT id, category FROM categories ORDER BY gruppe, subid, category ASC" ) ;
Takker mange gange :) Lader til jeg har en tendens til at kaste mig over kryptiske projekter for tiden, men så det jo godt at der er hjælp at hente :)
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.