phpbar.de logo

Mailinglisten-Archive

[php] Selektion von Datensätze innerhalb einer zugeordneten Baumstruktur

[php] Selektion von Datensätze innerhalb einer zugeordneten Baumstruktur

Lars Brinkmann lbrink at t-online.de
Mit Aug 4 06:34:22 CEST 2004


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