Jeg sad også og kiggede på om jeg kunne få en "type" ind i strukturen lige inden "office". Type ville være om det var en "desktop" eller en "laptop", men jeg kunne ikke rigtig få den til at hænge sammen... Hvis i har nogen forslag til hvordan det kan løses så er jeg lutter ører og point :D
For mig er det lige meget hvad et hjælpende eksempel består af, jeg er bare gået lidt i sort med hvordan jeg laver udtrækkene på en måde så jeg kan lave en træ menu.
Jeg synes nu ellers tabelantallet er blevet fordoblet :)
Hvis jeg har forstået det ret, søger du et script som henter al data fra fire tabeller. Scriptet starter med en verdensdel og forgrener sig så til lande > by > bydel ?
Ja lige nøjagtigt, men bare for at der ikke opstår misforståelser så laver jeg lige et eksempel på data der kan ligge i den enkelte tabel...
Europa (region) Danmark (country) København (unit) IT-afdelingen (office) IBM T42-> Pentium M, 1.80 Ghz osv... (computer)->(computer description) Lars Larsen (user)
Jeg er stadig lidt i tvivl præcist hvad det er du vil, men i det her eksempel kan du fylde nogle værdier ind, og så skulle den gerne outputte: Verdendel>Land>By>Bydel ind til der ikke er mere data. Hvis det lyder rigtigt kan jeg godt lave PHP koden som smider det ind i et array.
INSERT INTO `bydel` VALUES (1, 'Bydel1', 1); INSERT INTO `bydel` VALUES (2, 'Bydel2', 2); INSERT INTO `bydel` VALUES (3, 'Bydel3', 2); INSERT INTO `bydel` VALUES (4, 'Bydel4', 5); INSERT INTO `bydel` VALUES (5, 'Bydel6', 6); INSERT INTO `bydel` VALUES (6, 'Bydel7', 6); INSERT INTO `bydel` VALUES (7, 'Bydel8', 6); INSERT INTO `bydel` VALUES (8, 'Bydel9', 7); INSERT INTO `bydel` VALUES (9, 'Bydel8', 8); INSERT INTO `lande` VALUES (7, 'Land1', 12); INSERT INTO `lande` VALUES (8, 'Land2', 12); INSERT INTO `lande` VALUES (9, 'Land3', 12); INSERT INTO `lande` VALUES (10, 'Land4', 13); INSERT INTO `lande` VALUES (11, 'Land5', 13); INSERT INTO `minby` VALUES (1, 'By1', 7); INSERT INTO `minby` VALUES (2, 'By2', 7); INSERT INTO `minby` VALUES (3, 'By3', 8); INSERT INTO `minby` VALUES (4, 'By4', 9); INSERT INTO `minby` VALUES (5, 'By5', 9); INSERT INTO `minby` VALUES (6, 'By6', 11); INSERT INTO `minby` VALUES (7, 'By7', 11); INSERT INTO `minby` VALUES (8, 'By8', 11); INSERT INTO `verdensdel` VALUES (12, 'Verdendel1'); INSERT INTO `verdensdel` VALUES (13, 'Verdensdel2');
-- Query --
SELECT verdensdel.`vdnavn`, lande.`landnavn`, minby.`bynavn`, bydel.`bydelnavn` FROM `verdensdel`,`lande`,`minby`,`bydel` where verdensdel.`id` = lande.`vdid` AND lande.`id` = minby.`landid` AND minby.`id` = bydel.`byid`
Korrekt eller ej, så må yderligere input fra undertegnede komme efter sleep(60*60*9), da jeg føler mig nødsaget til at diskdefragmentere min biologiske harddisk. (Sagt på en anden måde: Jeg er træt :-)
Jeg tror jeg bliver nød til at forklare mig lidt bedre...
Ud fra ovennævnte tabeller vil jeg gerne lave en træ menu til en webside. tabellerne skal hentes ud herakisk. Forstået på den måde at alt hvad der ligger i region skal vises som det yderste led i menuen. Hvis en af dem har en undermenu skal der vises et plus eller noget foran det (Det laver jeg ved hjælp af JS). Sådan skal det bliver ved videre ind i træet. Hver tabel er et led i træet og der kan godt forekomme flere undermenuer til en \"hovedmenu\".
Jeg vil gerne kunne trække dataerne ud i en given rækkefølge og lægge det i et array som jeg så itererer igennem og laver det visuelle ud fra.
Et eksempel på en udfoldet menu:
Europa Danmark København Kontor1 Computer1 Medarbejder1 Computer2 Medarbejder2 Århus Sverige Stockholm Norge USA
Okay.. det skulle nok kunne lade sig gøre. Det er dog ikke sikkert jeg har tid til at se på det før fredag, så hvis der er andre der ude med et bud, så bare smid det ind :)
Jeg har tænkt meget på om det kunne laves rekursivt, eller ved at hver gren har en funktion som så kalder næste funktion i ledet... Det er dog ikke lige min stærke side at lave den slags.
Jeg har den onde SQL query her, men den viser kun de steder hvortil der findes en bruger og en computerbeskrivelse:
SELECT gg_region.`gg_region`, gg_country.`gg_country`, gg_unit.`gg_department`, gg_office.`gg_office`, CONCAT(gg_pc_name.`name`,' -> ',gg_pc_description.`pc_description`) AS `pc`, CONCAT(gg_user.`firstname`,gg_user.`middlename`,gg_user.`lastname`) AS `user` FROM `gg_region`, `gg_country`, `gg_unit`, `gg_office`, `gg_pc_name`, `gg_pc_description`, `gg_user` WHERE gg_region.`id` = gg_country.`regionid` AND gg_country.`id` = gg_unit.`countryid` AND gg_unit.`id` = gg_office.`unitid` AND gg_office.`id` = gg_pc_name.`officeid` AND gg_pc_name.`id` = gg_pc_description.`id` AND gg_pc_name.`id` = gg_user.`id`
Det skal også lige tilføjes at jeg har oprettet et felt i hver tabel, så man kan holde står på hvad der tilhører hvad:
DROP TABLE IF EXISTS `gg_country`; CREATE TABLE `gg_country` ( `id` int(11) NOT NULL auto_increment, `regionid` int(11) NOT NULL default '0', `gg_country` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_historik`; CREATE TABLE `gg_historik` ( `id` int(11) NOT NULL auto_increment, `pid` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_office`; CREATE TABLE `gg_office` ( `id` int(11) NOT NULL auto_increment, `unitid` int(11) NOT NULL default '0', `gg_office` varchar(50) NOT NULL default '', `pid` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_pc_description`; CREATE TABLE `gg_pc_description` ( `id` int(11) NOT NULL auto_increment, `pcid` int(11) NOT NULL default '0', `pc_name` varchar(150) NOT NULL default '', `pc_description` varchar(150) NOT NULL default '', `pid` int(11) NOT NULL default '0', `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_pc_name`; CREATE TABLE `gg_pc_name` ( `id` int(11) NOT NULL auto_increment, `officeid` int(11) NOT NULL default '0', `name` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_region`; CREATE TABLE `gg_region` ( `id` int(11) NOT NULL auto_increment, `gg_region` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_unit`; CREATE TABLE `gg_unit` ( `id` int(11) NOT NULL auto_increment, `countryid` int(11) NOT NULL default '0', `gg_department` varchar(100) NOT NULL default '', `gg_dep_short` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `gg_user`; CREATE TABLE `gg_user` ( `id` int(11) NOT NULL auto_increment, `pcid` int(11) NOT NULL default '0', `firstname` varchar(50) NOT NULL default '', `middlename` varchar(50) NOT NULL default '', `lastname` varchar(50) NOT NULL default '', `title` varchar(50) NOT NULL default '', `pid` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Jeg ved dog ikke hvordan query'en skal se ud, for at man får det som du gerne vil have. Jeg ved dog godt hvordan det skal laves, på en anden måde, men det kræver en query for hver undermenu der åbnes, og det er ikke helt optimalt.
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.