[Solved] DB-Verschachtelungen ?!

Begonnen von pyr0, 10 September 2010, 15:58:03

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

pyr0

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


Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

anmShinichi

Zitat von: pyr0 am 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
MonsterWorks - www.monsterworks.de

pyr0

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:
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

anmShinichi

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 /
MonsterWorks - www.monsterworks.de

pyr0

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:
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

anmShinichi

das muss anders gemacht werden, du rufst ja nur das erste verzeichnis ab... dazu muss ich kurz denken... *g*
MonsterWorks - www.monsterworks.de

anmShinichi

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 />";
}
MonsterWorks - www.monsterworks.de

pyr0

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
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

anmShinichi

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 ^^.
MonsterWorks - www.monsterworks.de

pyr0

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
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

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.
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!