function get_cat_path($id){ $res = mysql_query("SELECT * FROM shop_cats WHERE id = '$id'") or die(mysql_error()); $row = mysql_fetch_array($res); if($row["parent"] != "0"){ return get_cat_path($row[parent])." > ".$row["name"]; }else{ return $row["name"]; } }
Ovenstående kode skriver en total/komplet kategori sti. Men hvis jeg kalder den 60 gange på samme side får jeg en timeout :( Er der nogen der har en ide til hvordan dette kan forbedres? Det er jo lidt at en hård en med så mange sqls i rap! shop_cats tabellen består af: id, name og parent. Hvis en kategori er sin egen "herre" altså en absolut topkategori har den parent = '0', ellers er parent den der er "far" til den nye underkategori. Pt går kategorierne ikke længere ned en 3 "generationer". Men der er da er ca. 60 kategorier i alt, bliver det noget af en langhåret omgang at skulle liste dem alle på en side. (i en dropdown-menu)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Den er ikke helt skræddersyet til dig. Jeg har kategori forbindelser i én tabel og titler i en anden - for at en kategori reelt kan optræde flere steder i et træ.
Koden er som følger ---
<?php function treestructure_fetch_nodes() { $res = array(); $sql = mysql_query("SELECT id, title, description FROM category ORDER BY title") or die(mysql_error()); if (!mysql_num_rows($sql)) { return $res; exit; }
while ($foo = mysql_fetch_array($sql)) { $res[$foo["id"]] = $foo; }
return $res; }
function treestructure_fetch_connection() { $parentarray = array(); $sql = mysql_query("SELECT id, parentid FROM category_connect ORDER BY id") or die(mysql_error()); if (!mysql_num_rows($sql)) { return $parentarray; exit; }
while ($foo = mysql_fetch_array($sql)) { $parentarray[$foo["parentid"]][] = $foo["id"]; }
Ja, jeg har kigget en masse på det, og tak for det iøvrigt. Problemet er lidt at systemet er indrettet således at jeg jeg kalder en function med et id som så returnerer den "fulde" sti. Dette kan godt lade sig gøre da det kun giver nogle få kald. Problemet er når jeg skal liste alle mine kategorier. Når jeg så lister alle mine kategorier (alle sammen!!!) så ville jeg jo alligevel kalde denne funktion en halv mia. gange. Derfor er det en lidt omfattende opgave at skulle omskrive alle de sider der lister kategorier. (heldigvis er det kun i administrationsmodulet, så det er til at have med at gøre)
Men jo jeg har tænkt over det, men er gik lidt i stå ved flerdimensionelle arrays. Mest hvordan det skulle bygges op og så smides ud på igen. Kan du evt. forklare hvad der skulle ske? Hvilken dimension af arrayet der bærer hvilke informationer. Hvordan listen skal udføres. Det jeg gerne skulle opnå er et resultat formateret som nedenstående:
hardware > apple > bærbare hardware > pc > bærbare software > Adobe > photoshop
men det eneste den får af vide er jo id, name og parent.
Takker mange gange for den flittige indsats so far
naes >> det min kode - til et helt andet site og opbygning gør, er at beregne alle referencerne til kategorierne, altså det såkaldte "breadcrumb navigation" som det jo læner sig voldsomt op af. På den måde, vil du med kun to sql kald kunne liste samtlige, fremfor flere kald for at vise én.
Jeg leger lidt med det og vender tilbage. Har du noget db ht="må lege med ? Eller skal jeg selv finde på det
CREATE TABLE shop_cats ( id int(10) DEFAULT '0' NOT NULL auto_increment, name varchar(30) NOT NULL, parent int(10) DEFAULT '0' NOT NULL, UNIQUE id (id) );
# # Data dump for tabellen shop_cats #
INSERT INTO shop_cats VALUES (1, 'Hardware', 0); INSERT INTO shop_cats VALUES (3, 'Markzware', 2); INSERT INTO shop_cats VALUES (4, 'Techno Design', 2); INSERT INTO shop_cats VALUES (5, 'Plugins', 0); INSERT INTO shop_cats VALUES (6, 'PDF', 2); INSERT INTO shop_cats VALUES (7, 'Flightcheck', 3); INSERT INTO shop_cats VALUES (12, 'Biler', 1); INSERT INTO shop_cats VALUES (10, 'PC', 1); INSERT INTO shop_cats VALUES (27, 'Skærme', 0); INSERT INTO shop_cats VALUES (14, 'Service', 0); INSERT INTO shop_cats VALUES (15, 'Software', 0); INSERT INTO shop_cats VALUES (24, 'Compaq', 1); INSERT INTO shop_cats VALUES (23, 'Bærbare', 21); INSERT INTO shop_cats VALUES (21, 'Apple', 1); INSERT INTO shop_cats VALUES (18, 'Arbejdsstationer', 10);
Jeg har lige fundet ud af at der er en fejl i mit rekursive kald. Somehow kører den i ring, og det er derfor den timerout! Men jeg kan ikke lige forstå hvorfor. :(
LJ, Det er dit svar der er det gode! Vil du ha nogle af de dersens point som jeg har??? :)
/NbG
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.