Mailinglisten-Archive |
Hi PHPler, Nehmen wir mal an, wir haben die folgende Baumstruktur, die ich mit PEAR:Tree abbilde: Welt (ID=1, L=1, R=18) - Asien (ID=2, L=2, R=3) - Europa (ID=3, L=4, R=17) - Deutschland (ID=4, L=5, R=14) - NRW (ID=5, L=6, R=11) - Düsseldorf (ID=6, L=7, R=8) - Dortmund (ID=7, L=9, R=10) - Hessen (ID=8, L=12, R=13) - Frankreich (ID=9, L=15, R=16) Nun habe ich einen Datensatz, der einem Eintrag aus der Baumstruktur zugeordnet werden soll. Zum Beispiel: Hilmis' Dönerbude in Dortmund. Also weise ich dem Hilmi-Datensatz die Datensatz-ID von 'Dortmund' zu, wäre hier im Beispiel die '7'. Wenn ich mir nun alle Dönerbuden aus Dortmund anzeigen lassen möchte, schreibe ich also: SELECT * FROM 'buden' WHERE ORT = '7'. Jetzt möchte ich aber, dass ich bei 'Welt' anfange, also alle angelegten Dönerbuden ausgebe, und je tiefer ich in die Baumstruktur einsteige, entsprechend immer weniger Dönerbuden angezeigt bekommen (nur noch Buden aus Europa, Deutschland, ...) Wenn ich jetzt alle Buden aus Deutschland haben möchte, könnte ich alle 'Childs' von Deutschland ermitteln, also alle Datensätze wo L>=5 und R<=14 ist, von diesen die ID's ermitteln und abfragen: SELECT * FROM 'buden' WHERE ORT = '4' // Für Deutschland OR ORT = '5' // Für NRW OR ORT = '6' // Für Düsseldorf OR ORT = '7' // Für Dortmund OR ORT = '8' // Für Hessen Das scheint mir aber sehr umständlich und bestimmt sehr ressourcenhungrig. Gedacht hatte ich auch schon, dem Hilmi-Datensatz nicht die ID, sondern den L-Wert zuzuordnen. Dann könnte ich bei der Abfrage auch mit < und > arbeiten. Aber wenn sich die Baumstruktur ändert, müsste ich auch jedesmal die Dönerbuden-Datensätze ändern. Auch das finde ich nicht besonders geschickt. Da gibt es doch bestimmt einen besseren Weg, oder? -- Viele Grüße Lars Brinkmann mailto:lbrink at t-online.de
php::bar PHP Wiki - Listenarchive