pragmaMx Support Forum

pragmaMx => Coder und Bastlerecke => Thema gestartet von: pyr0 in 10 September 2010, 15:58:03

Titel: [Solved] DB-Verschachtelungen ?!
Beitrag von: pyr0 in 10 September 2010, 15:58:03
Tach alle zusammen  :smile:

hab da mal wieder ein Problem, ich möchte einen miniDateibrowser schreiben.

Folgendes Szenario:

DB-Tabelle:  in der ich folgende Infos abelege

ID | projectid | dir_name | dir_desc | sub_dir

Soweit so gut, wenn ich jetzt zB ein Verzeichnis anlege sieht es ja so aus

ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home | testbeschreibung | 0

wenn ich dazu jetzt also ein Unterverzeichnis anlege sieht es so aus

ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home-unterverzeichnis | testbeschreibung | 1

In sub_dir steht jetzt die ID vom Hauptverzeichnis, und das Unterverzeichnis  wird auch angezeigt.

Nur wie bekomm ich das jetzt hin, dass man dann auch noch mehr Unterverzeichnisse unterhalb von home-unterverzeichnis machen kann. Also eine unendliche Verschachtelung ?!?!?

Da steh ich völlig auf dem Schlauch  :gruebel:


Merci für die Hilfe pyr0


Titel: Re: DB-Verschachtelungen ?!
Beitrag von: anmShinichi in 10 September 2010, 16:09:27
Zitat von: pyr0 in 10 September 2010, 15:58:03
ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home | testbeschreibung | 0
1  | 23 | home-unterverzeichnis | testbeschreibung | 1

So! Da ist ein Fehler. Die ID sollte nur einmalig vergeben werden. Und dann geht auch alles. Daher:

ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home | testbeschreibung | 0
2  | 23 | home-unterverzeichnis | testbeschreibung | 1
3  | 23 | home-unterverzeichnis2 | testbeschreibung | 2
4  | 23 | home-unterverzeichnis3 | testbeschreibung | 3
5  | 23 | home-unterverzeichnis4 | testbeschreibung | 4

Diese Struktur wäre es dann:
/home / home-unterverzeichnis / home-unterverzeichnis2 / home-unterverzeichnis3 / home-unterverzeichnis4
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: pyr0 in 10 September 2010, 16:52:43
Ja okay mein Fehler, stimmt die ID vergeb ich mittels auto_increment

Aber damit bekomme noch lange keine Unendlich Tiefe Verschachtelung hin, denn wie soll das gehen wenn unterhalb von
/ home-unterverzeichnis4 noch folgendes ist zB

/home / home-unterverzeichnis4 / noch-ein-unterverzeichnis /noch-ein-unterverzeichnis

Wie bekomm ich das hin?   :gruebel:
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: anmShinichi in 10 September 2010, 17:14:06
ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home | testbeschreibung | 0
2  | 23 | home-unterverzeichnis | testbeschreibung | 1
3  | 23 | home-unterverzeichnis2 | testbeschreibung | 2
4  | 23 | home-unterverzeichnis3 | testbeschreibung | 3
5  | 23 | home-unterverzeichnis4 | testbeschreibung | 4

Dein Wert SUB_DIR gibt doch an, worin du dein Verzeichnis findest. Wir tragen einfach mal das hier ein: /home / home-unterverzeichnis4 / noch-ein-unterverzeichnis /noch-ein-unterverzeichnis

ID | projectid | dir_name | dir_desc | sub_dir
1  | 23 | home | testbeschreibung | 0
2  | 23 | home-unterverzeichnis | testbeschreibung | 1
3  | 23 | home-unterunterverzeichnis | testbeschreibung | 2
4  | 23 | home-unterunterunterverzeichnis | testbeschreibung | 3
5  | 23 | home-unterunterunterunterverzeichnis | testbeschreibung | 4
6  | 23 | home-unterverzeichnis4 | testbeschreibung | 1
7  | 23 | noch-ein-unterverzeichnis | testbeschreibung | 6
8  | 23 | noch-ein-unterverzeichnis | testbeschreibung | 7

So sieht das hier oben aus:

(0) /
(0) / (1) Home /
(0) / (1) Home / (2) home-unterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis / (4) home-unterunterunterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis / (4) home-unterunterunterverzeichnis / (5) home-unterunterunterunterverzeichnis /
(0) / (1) Home / (6) home-unterverzeichnis4 /
(0) / (1) Home / (6) home-unterverzeichnis4 / (7) noch-ein-unterverzeichnis /
(0) / (1) Home / (6) home-unterverzeichnis4 / (7) noch-ein-unterverzeichnis / (8) noch-ein-unterverzeichnis /
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: pyr0 in 10 September 2010, 17:19:56
Okay das versteh ich  :mad2:

Nur wie mache ich jetzt die DB Abfrage dazu ?
Im Moment versuch ich es so:
in $ID steht die Projekt ID drin

<?php

$ID
=$project_id;

$result sql_query("SELECT ID,dirname  FROM " $prefix "_miniGW_fm_dirs where project_id='$ID' AND sub_dir='0'");
while(list(
$sub_dir,$dirname) = sql_fetch_row($result))
{
    echo 
"<b>$dirname</b> :<br />";    
    
# hole jetzt SubDirs
    
$result1 sql_query("SELECT ID,dirname  FROM " $prefix "_miniGW_fm_dirs_subdir where project_id='$ID' AND sub_dir='$sub_dir'");
    while(list(
$subdir,$subdirname) = sql_fetch_row($result1))
    {  
         echo 
$subdirname ";
     }
}
?>



damit bekomm ich aber nicht hin  :mad2:
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: anmShinichi in 10 September 2010, 17:26:35
das muss anders gemacht werden, du rufst ja nur das erste verzeichnis ab... dazu muss ich kurz denken... *g*
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: anmShinichi in 10 September 2010, 18:34:49
du benötigst noch sublvl, um die Stufe der Hierachie anzugeben.

Und dann diesen Code. Du siehst das Ergebnis hier: http://dev.animenmore.de/pmx11/modules.php?name=miniGW

Daten in der DB:

ID  projectid  dir_name  dir_desc  sub_dir  sub_lvl 
1 27 Home Mein Home-Verzeichnis 0 0
2 27 HomeDIR1 Mein erstes Verzeichnis 1 1
3 27 NextDir1 Das 1. Unterverzeichnis 2 2
4 27 HomeDir2 Das zweite Untermenü 1 1
5 27 NextDir2 Das 2. Unterverzeichnis 4 2
6 27 NextDir3 Das 3. Unterverzeichnis 4 2
7 27 NextDirDir1 Das 1. Unterunterverzeichnis 6 3


$result = sql_query("SELECT ID,dirname,sublvl,subdir  FROM " . $prefix . "_miniGW_fm_dirs where ID NOT IN (SELECT subdir FROM " . $prefix . "_miniGW_fm_dirs WHERE project_id = '$ID' group by subdir)");
while(list($sub_dir,$dirname,$sublvl,$home_dir) = sql_fetch_row($result))
{   
$pfad = "";
$sub_dir_check = $home_dir;

for ($i=$sublvl;$i>0;$i--){
//echo $sub_dir."<br />";
$result2 = sql_query("SELECT ID,dirname, subdir FROM " . $prefix . "_miniGW_fm_dirs where ID = $sub_dir_check limit 0,1");

while(list($subdir2,$subdirname2,$home_dir) = sql_fetch_row($result2)){
$pfad = "($subdir2)" . $subdirname2 . " - " . $pfad;
$sub_dir_check = $home_dir;
}

}

echo "<b>$pfad: ($sub_dir) $dirname</b><br />";
}
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: pyr0 in 10 September 2010, 21:37:24
Erstmal ein DICKES DANKE,
hab es zwar noch nicht getestet aber werd ich morgen machen.


Kannst Du mir das auch mal erklären quasi den logischen Weg den das Script macht. Ich steig da nicht ganz durch.

Merci
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: anmShinichi in 10 September 2010, 21:52:37
Erstmal holt der erste SQL alle Einträge, die nicht als Unterordner existieren. So bekommst du überall die letzten Ordner. Im jeweils letzten Ordner wird durch sublvl verraten, wie viele Ordner bis zum Home existieren. Darauf ist die FOR-NEXT-Schleife aufgebaut. Die baut die Ordnerstruktur rückwärts bis zum Home auf, indem immer die Oberordner abgefragt und dessen Oberordner-ID abgerufen werden.

So läuft der Weg eigentlich rückwärts. Anfangs sind alle Endordner bekannt, die nicht als Oberordner für andere Ordner dienen und dann geht die Schleife den Weg bis HOME zurück ^^.
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: pyr0 in 10 September 2010, 22:14:30
Und wie mache ich das wenn ich jetzt neue Verzeichnisse anlegen will?

Man da steig ich echt nicht durch ist wohl schon zu spät.



:puzzled: Gruss pyr0
Titel: Re: DB-Verschachtelungen ?!
Beitrag von: pyr0 in 12 September 2010, 11:25:52
Also nochmal Danke an anmShinichi, deine Posts haben mir doch einiges erklärt  :smile:
Aber das werd ich die Tage mal ausprobieren wie ich da dann auch die passenden Daten in die DB bekomme und vorallem an die richtige Stelle  :gruebel:

Hab es aber am Ende dann doch anders gelöst.