Archive for März, 2015
Ein altes Navigationsmenu sortieren
Ich habe eine kleine Programmieraufgabe für euch.
Ich habe ein altes Projekt, in dem ich folgende Navigationsstruktur in der Datenbank habe:
menuid | parentid | title | level | sortid |
---|---|---|---|---|
1 | 3 | Wurm 1.1 | 2 | 10 |
2 | 6 | Vogel 2.1 | 2 | 30 |
3 | 0 | Tiger 1 | 1 | 10 |
4 | 6 | Hund 2.2 | 2 | 40 |
5 | 3 | Katze 1.2 | 2 | 11 |
6 | 0 | Pferd 2 | 1 | 20 |
7 | 1 | Baer 1.1.1 | 3 | 0 |
8 | 3 | Schwein 1.3 | 2 | 12 |
9 | 4 | Esel 2.2.1 | 3 | 0 |
Nun möchte ich diese Menüpunkte sortiert ausgeben, und zwar in der folgenden Reihenfolge:
Tiger 1 Wurm 1.1 Baer 1.1.1 Katze 1.2 Schwein 1.3 Pferd 2 Vogel 2.1 Hund 2.2 Esel 2.2.1
Die Sortierreihenfolge muss anhand der menuid, parentid, level und sortid berechnet werden. Eine parentid verweist auf den Elternknoten, sprich er ist darunter einzusortieren. Zwei Einträge mit der selben parentid sind nach der Spalte sortid zu sortieren.
Der Wurm ist ein Kindknoten vom Tiger, der Bär ist ein Kindknoten vom Wurm. Die Katze ist auch ein Kindknoten vom Tiger, hat aber die höhere sortid, muss also nach dem Wurm einsortiert werden.
Es ist ein altes Projekt mit dieser Struktur, und die Frage ist wie man das am einfachsten und schnellsten sortiert?
Geht das ganze mit einem SQL-Query? Das wäre natürlich die beste Lösung, aber mir ist kein solcher Query eingefallen der das Problem lösen könnte.
Also muss es in PHP sortiert werden. Ich habe das ganze in ein PHP-Array gepackt und hier für euch zum Spielen bereitgestellt:
Dort könnt ihr an dem Algorithmus arbeiten, sodass aus dem Ursprungs-Array das Ziel-Array wird. Nachdem ihr „eval()“ gedrückt habt könnt ihr einfach die URL hier in die Kommentare packen, nach jedem Druck auf „eval()“ wird das ganze gespeichert und versioniert.
Ich bin gespannt auf eure Lösungen!
Erstaunlich langsam beim Kopieren einer Datei auf ein NFS-Share
Heute mal etwas skurriles. Eigentlich eine Alltagsaufgabe, die man mit einem 2-Zeiler lösen kann, aber ich bin doch erstaunt über das Problem und die Lösung. Es geht darum, eine Datei auf einem NFS-Share abzulegen, das vorher per PUT zum Webserver hochgeladen wurde. Wahrscheinlich hat man das selbe Problem auch wenn die Datei per POST-Formular hochgeladen wurde.
Folgender Aufruf lädt eine Datei via PUT auf einen Webserver:
curl -T 100mb.test http://localhost/put.php
Mein einfaches Testscript, das die Datei auf das NFS-Share legen soll, sieht so aus: