[opengeodb] nur deutschland
Robert Böck
robert.boeck at googlemail.com
Son Mar 16 18:35:54 CET 2008
Hi Lucas,
Lucas Mengel wrote:
> Ich hab mir jetzt ein Statement gebastelt, welches nach
> Eingabe einer Postleitzahl die zu dieser Postleitzahl
> gehördenden Koordinaten und Stadtnamen ausgibt:
>
> SELECT
> a.text_type,
> a.text_val,
> a.loc_id,
> c.lon,
> c.lat
> FROM
> geodb_textdata a,
> geodb_textdata b,
> geodb_coordinates c
> WHERE
> a.text_locale = 'de' AND
> a.text_type = 500100000 AND
> b.loc_id = a.loc_id AND
> b.text_type = 500300000 AND
> b.text_val = 8000 AND
> c.loc_id = b.loc_id
>
>
> die 8000 ist die PLZ von Zürich. Das Ergebnis ist auch
> korrekt, aber leider unerwünscht, weil ich eigentlich nur
> deutsche Ergebnisse haben will!
> Jetzt meine Frage: Wie beschränke ich die Suchergebnisse auf
> Deutschland?
Hmmm, gute Frage. :-) Ich habe mir vor längerer Zeit mal eine Abfrage
geschnitzt, die alle Postleitzahlen von Bayern ausspuckt:
SELECT plz.loc_id as l_plz,
plz.text_val as t_plz
FROM geodb_hierarchies hi,
geodb_textdata land,
geodb_textdata bundesland,
geodb_textdata plz
WHERE hi.id_lvl2=land.loc_id AND
land.text_val='DE' AND
land.text_type=500100001 AND
hi.id_lvl3=bundesland.loc_id AND
bundesland.text_val='BY' AND
bundesland.text_type=500100001 AND
hi.loc_id=hi.id_lvl6 AND
plz.loc_id=hi.loc_id AND
plz.text_type=500300000
ORDER BY l_plz, t_plz
Du müsstest sehen, was du davon verwerten kannst. Ich stecke da momentan
auch nicht richtig drin, hatte schon seinerzeit meine Schwierigkeiten,
da durchzublicken, weil die SQL-Datenstruktur ein einziger Saustall ist,
von Normalisierung keine Spur.
Möglicherweise hilft es, in deinem SQL-Statement
WHERE
a.text_locale = 'de' AND
a.text_type = 500100000 AND
durch
WHERE
a.text_val='DE' AND
a.text_type=500100001 AND
zu ersetzen.
BTW, was hieltest du davon, statt den Aliasen a, b, c "sprechende"
Aliase zu verwenden? Dann würde man bei deinem SQL-Statement eher
durchblicken ...
cu, Robo :)