[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 :)