Avatar billede naesbygaard Nybegynder
11. marts 2002 - 13:10 Der er 12 kommentarer

Dynamisk kategori listing!?

Jeg har en kategoritabel.
ID | NAME | PARENT
1  |kager | 0
2  |brød  | 0
3  |små  | 1
4  |brune | 1
5  |rug  | 2
6  |kerner| 5
... osv.

Jeg kunne godt tænke mig at udarbejde en sql-sætninger der kunne liste det således:

Kager
- små
- brune
Brød
- Rug
  - Kerner

Vi er jo nok ude i noget join-noget, men jeg er helt blank!
OBS: Vær opmærksom på at der ikke er nogen begrænsning på subcats!

What dælen do we do?

/NbG
Avatar billede Slettet bruger
11. marts 2002 - 13:15 #1
function hent_kategorier ($id) {
global $menuitem;

$rs = mysql_query ("SELECT id,navn,ejer_id FROM links_kat WHERE id=$id");
if (mysql_num_rows($rs)) {
$row = mysql_fetch_row($rs);
$menuitem[] = "<a href=\"?valg=Kategorier&kategori=$row[0]\">$row[1]</a>";

hent_kategorier ($row[2]);
} else {
echo "&nbsp;>&nbsp;" . implode("&nbsp;>&nbsp;", array_reverse($menuitem));
$menuitem = array();
}
}

Er noget jeg selv bruger, som du kan se minder det en del om dit.
Avatar billede morw Nybegynder
11. marts 2002 - 13:23 #2
el_barto> Ikke optimalt med en rekursiv funktion der lavet et kald til databasen for hver gang funktionen kaldes. Læs dem ind i array, og gør det i php i stedet.
Avatar billede naesbygaard Nybegynder
11. marts 2002 - 13:28 #3
hmm... Jeg ville jo gerne have den til at vise hele lortet på en gang! Jeg forstår den ikke helt.
Hvilket id "trigger" du funktionen med?
Avatar billede naesbygaard Nybegynder
11. marts 2002 - 13:28 #4
morw -> fortæl fortæl :)
Avatar billede naesbygaard Nybegynder
11. marts 2002 - 13:30 #5
Kan der er ikke laves noget smartere sql?
Anyone!?
Avatar billede morpheus Nybegynder
11. marts 2002 - 20:59 #6
Jeg har brugt dette...
Det stiller dem dog ikke rekursivt op, men kan da nemt tilpasses...

Eller ?

<?php
// Først vælges maingrupperne
// Hvis der ikke er sat ID og SID bliver de sat i et array og udskrevet
// -- Så langt så godt.
// Herefter vælges subgrupperne
// Hvis ID er sat og SID ikke er sat puttes de i en array og udskrives
// -- Det var det
// Til sidst vælges varerne
// Hvis ID og SID er sat puttes de i et array og udskrives
// -- Finito

// CREATE TABLE maingrupper (
//  id int(11) NOT NULL auto_increment,
//  gruppenavn text NOT NULL,
//  PRIMARY KEY  (id)
// ) TYPE=MyISAM COMMENT='Tabel til hoved vare grupper';

// CREATE TABLE subgrupper (
//  id int(11) NOT NULL auto_increment,
//  gid int(11) NOT NULL default '0',
//  gruppenavn text NOT NULL,
//  PRIMARY KEY  (id)
// ) TYPE=MyISAM COMMENT='Tabel til vare grupper';

// CREATE TABLE varer (
//  id int(11) NOT NULL auto_increment,
//  sid int(11) NOT NULL default '0',
//  varenavn text NOT NULL,
//  aaben int(11) NOT NULL default '0',
//  lukket int(11) NOT NULL default '0',
//  beskrivelse longtext NOT NULL,
//  salgspris float NOT NULL default '0',
//  normalpris float NOT NULL default '0',
//  PRIMARY KEY  (id)
// ) TYPE=MyISAM COMMENT='Tabel til varerne';

include("conn.php");

$maingroups = mysql_query("select * from maingrupper order by gruppenavn") or die(mysql_error());
$subgroups = mysql_query("select * from subgrupper where gid = '$gid'") or die(mysql_error());
$varer = mysql_query("select * from varer where sid = '$sid'") or die(mysql_error());

if (!isset($gid) && !isset($sid)) {
    while ($maingroups_arr = mysql_fetch_array($maingroups)) {
        echo "<a href=?page=lagersalg2&gid=".$maingroups_arr['id'].">".$maingroups_arr['gruppenavn']."</a><br>";
    }
}
elseif (isset($gid) && !isset($sid)) {
    while ($subgroups_arr = mysql_fetch_array($subgroups)) {
echo "<a href=?page=lagersalg2&gid=".$maingroups_arr['id']."&sid=".$subgroups_arr['gid'].">".$subgroups_arr['gruppenavn']."</a><br>";
    }
}
elseif (isset($gid) && isset($sid)) {
    while ($varer_arr = mysql_fetch_array($varer)) {
        echo $varer_arr['varenavn']."<br>";
    }
}
?>
Avatar billede naesbygaard Nybegynder
25. april 2002 - 10:22 #7
morw (ja eller en anden for den sags skyld) -> Hvad blev det til? Kunne du ikke vise hvordan vi kunne lade php styre det så databasen ikke bliver lagt ned hvert ene og andet sekund?

/NbG
Avatar billede morpheus Nybegynder
25. april 2002 - 15:17 #8
naesbygaard > Kan min ikke bruges ?
Avatar billede naesbygaard Nybegynder
25. april 2002 - 15:25 #9
Så vidt jeg kunne forstå på dit script så er det med to tabeller; en til maincats og en til subcats. Jeg har kun en tabel til det hele.
Det jeg skal have er jo den komplette "kategori-sti" fra laveste sub til højeste main. (men alt i samme tabel).
Så umiddelbart kan jeg ikke lige bruge det, tør dog ikke udelukke noget :)

/NbG
Avatar billede morpheus Nybegynder
25. april 2002 - 16:11 #10
Har du prøvet at omskrive scriptet ?
Avatar billede naesbygaard Nybegynder
25. april 2002 - 16:15 #11
ikke ligefrem, jeg ville gerne vise jeg mit eksisterende og fungerende, men meget langsomme script. Men da tiscali opdaterer webparken kan jeg ikke få adgang til lortet :( *tude tude*
Så ligeså snart der bliver åbent igen, så kommer jeg og viser det, og så kan jeg også bedre forklare hvad det er jeg har gjort.

/NbG
Avatar billede hald. Nybegynder
26. marts 2003 - 21:23 #12
Hey naesbygaard !

Jeg går ud fra at du har fået løst dit problem for lang længest, meeen...efter som spørgsmålet stadig er åbent, tjaaa...så tager jeg chancen:

Du kan du jo evt. prøve flg:

Tilføj en ekstra kolonne med med navnet "GROUP", så din tabel vil komme til at se sådan her ud:

ID | NAME | PARENT | GROUP
1  |kager | 0      |  0
2  |brød  | 0      |  1
3  |små  | 1      |  0
4  |brune | 1      |  0
5  |rug  | 2      |  1 
6  |kerner| 5      |  1

På den måde kan du se i hvilken "hovedkategori" at du befinder dig...
SQL'en kunne så se sådan her ud:

"SELECT id, name FROM categories
ORDER BY group, parent, category ASC"

Ps. Hvis du har fundet en anden løsning, vil jeg meget gerne høre den ;o)

/Hald
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester