Ik beheer een site waar een verouderd systeem is om functies voor mensen in verbanden (groepen in boomstructuur) te bepalen. Maar gezien deze functies gebruikt worden voor het rechten systeem, wil ik deze behouden en een soort 'mapping' uitvoeren die per verband en de onderligende verbanden de naam van een bepaalde functie kan wijzigen.
In het verband soccie (tappers en dergelijken) heet een lid dus tapper en een voorzitter barcommissaris, dit geld dan ook voor alle verbanden die hieronder liggen.
Dit kan ik allemaal wel uitprogrameren, maar is inmens traag, hoewel je dat ook nog wel kan optimaliseren, meerdere levels in één query, meerdere functies in éé query, ben ik opzoek naar een manier omditop een elegante en snelle manier op te lossen.
Ik heb hier al veel andere topics voor bekeken waar onder ander andere datastructuren voor bomen worden gesuggereerd en bepaalde sql die MySql niet ondersteunt.
Heeft iemand goede ideeën?
functienaam
verbanden
In het verband soccie (tappers en dergelijken) heet een lid dus tapper en een voorzitter barcommissaris, dit geld dan ook voor alle verbanden die hieronder liggen.
Dit kan ik allemaal wel uitprogrameren, maar is inmens traag, hoewel je dat ook nog wel kan optimaliseren, meerdere levels in één query, meerdere functies in éé query, ben ik opzoek naar een manier omditop een elegante en snelle manier op te lossen.
Ik heb hier al veel andere topics voor bekeken waar onder ander andere datastructuren voor bomen worden gesuggereerd en bepaalde sql die MySql niet ondersteunt.
Heeft iemand goede ideeën?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| // functie om de gemapte functie te bepalen. function mapfunctie($FunctieNaam,$VerbandID,$FunctieID){ $naam_raw = query("SELECT Naam FROM functienaam WHERE VerbandID =$VerbandID AND FunctieID=$FunctieID"); if(mysql_num_rows($naam_raw) == 0) { if($naam = mapfunctierecur($VerbandID, $FunctieID)) { return $naam; } else{ return $FunctieNaam; } } else { $naam = mysql_fetch_array($naam_raw); return $naam['Naam']; } } // recursieve hulp functie voor map function mapfunctierecur($VerbandID, $FunctieID){ $verband_raw = query("SELECT Parent FROM verbanden WHERE VerbandID =$VerbandID"); $verband = mysql_fetch_array($verband_raw); if($verband['Parent'] == 0){ return FALSE; } else { $functienaam_raw = query("SELECT Naam FROM functienaam WHERE VerbandID ={$verband['Parent']} AND FunctieID=$FunctieID"); if(mysql_num_rows($functienaam_raw) != 0) { $functienaam = mysql_fetch_array($functienaam_raw); return $functienaam['Naam']; } else { return mapfunctierecur($verband['Parent'], $FunctieID); } } } |
functienaam
code:
1
2
3
4
| id int(10) UNSIGNED Nee auto_increment FunctieID int(10) UNSIGNED Nee 0 VerbandID int(10) UNSIGNED Nee 0 Naam varchar(30) Nee |
verbanden
code:
1
2
3
4
5
6
7
| VerbandID int(11) Nee auto_increment Naam varchar(255) Ja NULL Parent int(11) Ja NULL Positie int(11) Ja 0 Info mediumtext Ja NULL Link text Ja NULL Jaar int(11) Ja NULL |