Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

View: New views
4 Messages — Rating Filter:   Alert me  

Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

by bernhard.gatzhammer :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hallo,

habe mit folgender SQL-Abfrage (Beispiel aus Wiki) ein Problem:

SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name, typ.text_val AS typ
FROM geodb_textdata gtv
LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
LEFT JOIN geodb_textdata typ ON gtv.loc_id = typ.loc_id
LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
WHERE name.text_type = 500100000 /* Name */
  AND plz.text_type = 500300000 /* Postleitzahl */
  AND typ.text_type = 400300000 /* Typ */
  AND gtv.text_type = 400100000 /* Teil von */
  AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */;

Laut meinem Verständnis werden hier nur Ergebnisse angezeigt, die alle Bedingungen erfüllen, d.h. nur Orte, die einen Eintrag einer PLZ haben UND einen Eintrag für Typ (also "Markt" z.B.) haben usw.

Da ich aber auch in meiner Ergebnis-Liste die Ortsteile haben möchte (und die haben nun mal keinen Typ-Eintrag) muss ich den Typ bei der ersten Abfrage weglassen und dann bei der Auflistung der Ergebnisse mit einer zweiten SQL-Abfrage mir den Typ anzeigen lassen (sofern existent).

Wie ist es möglich, mit einer einzigen Abfrage das zu bewerkstelligen? (Kenn mich schon einigermaßen mit PHP und MySQL aus, aber JOINS waren mir bis dato noch fremd...)


Grüße
Gatzhammer Bernhard

--
Mailingliste OpenGeoDB
Listenadresse: opengeodb@...
Informationen: http://opengeodb.de
Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)

Re: Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

by Peter Wendorff :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hallo Bernhard.
Ich würde über Einträge vom Typ "Ebene" abfragen, also:

SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name, typ.text_val AS typ
FROM geodb_textdata gtv
LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
LEFT JOIN geodb_textdata lvl ON gtv.loc_id = lvl.loc_id
LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
WHERE name.text_type = 500100000 /* Name */
  AND gtv.text_type = 400100000 /* Teil von */
  AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */
  AND lvl.text_val >=6 //6 sind (eigenständige Orte, >6 ist alles daruntergeordnete


Anstatt also nach dem Typ zu fragen, würde ich die Ebene abfragen -
Level 6 ist "Stadt", Level 7 Stadtteil oder ähnliches und so weiter.
Damit sollten alle Städte und Stadtteile (aber eben auch Straßen etc)
ausgegeben werden.
Eventuell musst Du das weiter eingrenzen - je nachdem, wie Du das brauchst.

Gruß
Peter Wendorff
(jongleur)


bernhard.gatzhammer@... schrieb:

> Hallo,
>
> habe mit folgender SQL-Abfrage (Beispiel aus Wiki) ein Problem:
>
> SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name, typ.text_val AS typ
> FROM geodb_textdata gtv
> LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
> LEFT JOIN geodb_textdata typ ON gtv.loc_id = typ.loc_id
> LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
> WHERE name.text_type = 500100000 /* Name */
>   AND plz.text_type = 500300000 /* Postleitzahl */
>   AND typ.text_type = 400300000 /* Typ */
>   AND gtv.text_type = 400100000 /* Teil von */
>   AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */;
>
> Laut meinem Verständnis werden hier nur Ergebnisse angezeigt, die alle Bedingungen erfüllen, d.h. nur Orte, die einen Eintrag einer PLZ haben UND einen Eintrag für Typ (also "Markt" z.B.) haben usw.
>
> Da ich aber auch in meiner Ergebnis-Liste die Ortsteile haben möchte (und die haben nun mal keinen Typ-Eintrag) muss ich den Typ bei der ersten Abfrage weglassen und dann bei der Auflistung der Ergebnisse mit einer zweiten SQL-Abfrage mir den Typ anzeigen lassen (sofern existent).
>
> Wie ist es möglich, mit einer einzigen Abfrage das zu bewerkstelligen? (Kenn mich schon einigermaßen mit PHP und MySQL aus, aber JOINS waren mir bis dato noch fremd...)
>
>
> Grüße
> Gatzhammer Bernhard
>
>  

--
Mailingliste OpenGeoDB
Listenadresse: opengeodb@...
Informationen: http://opengeodb.de
Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)

Re: Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

by bernhard.gatzhammer :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hallo Peter,
danke für die schnelle Antwort.
Ich kanns gerade nicht live testen, aber so wie die Abfrage aussieht bekomme ich hier nicht den Typ des Ortes (also z.B. ob "Markt", "Gemeinde" oder "Stadt" - hat ja alles meines Wissens die gleiche Ebene 6, oder nicht?) in eine Variable ausgespielt... oder?
Denn das ist genau das Problem, ich will als Ausgabe nicht nur den Namen des Ortes hinschreiben lassen, sondern auch den Typ, schließlich möchte der Benutzer wissen, ob es sich hier um einen Markt oder Gemeinde oder Stadt handelt (und mit der ID oder Ebene allein kann der Benutzer ja nix anfangen..).

Ich hoffe, ich hab mein Problem einigermaßen verständlich erklärt.

Grüße
Bernhard Gatzhammer

*************************


-------- Original-Nachricht --------
> Datum: Tue, 07 Oct 2008 09:56:22 +0200
> Von: Peter Wendorff <wendorff@...>
> An: Mailingliste OpenGeoDB <opengeodb@...>
> Betreff: Re: [opengeodb] Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

> Hallo Bernhard.
> Ich würde über Einträge vom Typ "Ebene" abfragen, also:
>
> SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name,
> typ.text_val AS typ
> FROM geodb_textdata gtv
> LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
> LEFT JOIN geodb_textdata lvl ON gtv.loc_id = lvl.loc_id
> LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
> WHERE name.text_type = 500100000 /* Name */
>   AND gtv.text_type = 400100000 /* Teil von */
>   AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */
>   AND lvl.text_val >=6 //6 sind (eigenständige Orte, >6 ist alles
> daruntergeordnete
>
>
> Anstatt also nach dem Typ zu fragen, würde ich die Ebene abfragen -
> Level 6 ist "Stadt", Level 7 Stadtteil oder ähnliches und so weiter.
> Damit sollten alle Städte und Stadtteile (aber eben auch Straßen etc)
> ausgegeben werden.
> Eventuell musst Du das weiter eingrenzen - je nachdem, wie Du das
> brauchst.
>
> Gruß
> Peter Wendorff
> (jongleur)
>
>
> bernhard.gatzhammer@... schrieb:
> > Hallo,
> >
> > habe mit folgender SQL-Abfrage (Beispiel aus Wiki) ein Problem:
> >
> > SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name,
> typ.text_val AS typ
> > FROM geodb_textdata gtv
> > LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
> > LEFT JOIN geodb_textdata typ ON gtv.loc_id = typ.loc_id
> > LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
> > WHERE name.text_type = 500100000 /* Name */
> >   AND plz.text_type = 500300000 /* Postleitzahl */
> >   AND typ.text_type = 400300000 /* Typ */
> >   AND gtv.text_type = 400100000 /* Teil von */
> >   AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */;
> >
> > Laut meinem Verständnis werden hier nur Ergebnisse angezeigt, die alle
> Bedingungen erfüllen, d.h. nur Orte, die einen Eintrag einer PLZ haben UND
> einen Eintrag für Typ (also "Markt" z.B.) haben usw.
> >
> > Da ich aber auch in meiner Ergebnis-Liste die Ortsteile haben möchte
> (und die haben nun mal keinen Typ-Eintrag) muss ich den Typ bei der ersten
> Abfrage weglassen und dann bei der Auflistung der Ergebnisse mit einer
> zweiten SQL-Abfrage mir den Typ anzeigen lassen (sofern existent).
> >
> > Wie ist es möglich, mit einer einzigen Abfrage das zu bewerkstelligen?
> (Kenn mich schon einigermaßen mit PHP und MySQL aus, aber JOINS waren mir
> bis dato noch fremd...)
> >
> >
> > Grüße
> > Gatzhammer Bernhard
> >
> >  
>
> --
> Mailingliste OpenGeoDB
> Listenadresse: opengeodb@...
> Informationen: http://opengeodb.de
> Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)
--
Mailingliste OpenGeoDB
Listenadresse: opengeodb@...
Informationen: http://opengeodb.de
Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)

Re: Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung

by Peter Wendorff :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hallo nochmal.
Wenn Dir der Typ fehlt, dann frag den einfach auch noch mit ab ;)
(Übrigens hatte ich vorhin auch noch 'nen Fehler drin - typ.text_val AS
typ war ja schon mit im SELECT-Part aufgenommen, obwohl es die Tabelle
typ nicht mehr gab)

SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name, typ.text_val AS typ
FROM geodb_textdata gtv
LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
LEFT JOIN geodb_textdata lvl ON gtv.loc_id = lvl.loc_id
LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
LEFT JOIN geodb_textdata typ ON gtv.loc_id = typ.loc_id
WHERE name.text_type = 500100000 /* Name */
  AND gtv.text_type = 400100000 /* Teil von */
  AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */
  AND lvl.text_val >=6 //6 sind (eigenständige Orte, >6 ist alles daruntergeordnete
  AND typ.text_type = 400300000

Versuchs mal so.

Gruß
Peter

bernhard.gatzhammer@... schrieb:

> Hallo Peter,
> danke für die schnelle Antwort.
> Ich kanns gerade nicht live testen, aber so wie die Abfrage aussieht bekomme ich hier nicht den Typ des Ortes (also z.B. ob "Markt", "Gemeinde" oder "Stadt" - hat ja alles meines Wissens die gleiche Ebene 6, oder nicht?) in eine Variable ausgespielt... oder?
> Denn das ist genau das Problem, ich will als Ausgabe nicht nur den Namen des Ortes hinschreiben lassen, sondern auch den Typ, schließlich möchte der Benutzer wissen, ob es sich hier um einen Markt oder Gemeinde oder Stadt handelt (und mit der ID oder Ebene allein kann der Benutzer ja nix anfangen..).
>
> Ich hoffe, ich hab mein Problem einigermaßen verständlich erklärt.
>
> Grüße
> Bernhard Gatzhammer
>
> *************************
>
>
> -------- Original-Nachricht --------
>  
>> Datum: Tue, 07 Oct 2008 09:56:22 +0200
>> Von: Peter Wendorff <wendorff@...>
>> An: Mailingliste OpenGeoDB <opengeodb@...>
>> Betreff: Re: [opengeodb] Ausgabe von Orten UND Ortsteilen mit evtl. Typ-Bezeichnung
>>    
>
>  
>> Hallo Bernhard.
>> Ich würde über Einträge vom Typ "Ebene" abfragen, also:
>>
>> SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name,
>> typ.text_val AS typ
>> FROM geodb_textdata gtv
>> LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
>> LEFT JOIN geodb_textdata lvl ON gtv.loc_id = lvl.loc_id
>> LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
>> WHERE name.text_type = 500100000 /* Name */
>>   AND gtv.text_type = 400100000 /* Teil von */
>>   AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */
>>   AND lvl.text_val >=6 //6 sind (eigenständige Orte, >6 ist alles
>> daruntergeordnete
>>
>>
>> Anstatt also nach dem Typ zu fragen, würde ich die Ebene abfragen -
>> Level 6 ist "Stadt", Level 7 Stadtteil oder ähnliches und so weiter.
>> Damit sollten alle Städte und Stadtteile (aber eben auch Straßen etc)
>> ausgegeben werden.
>> Eventuell musst Du das weiter eingrenzen - je nachdem, wie Du das
>> brauchst.
>>
>> Gruß
>> Peter Wendorff
>> (jongleur)
>>
>>
>> bernhard.gatzhammer@... schrieb:
>>    
>>> Hallo,
>>>
>>> habe mit folgender SQL-Abfrage (Beispiel aus Wiki) ein Problem:
>>>
>>> SELECT gtv.loc_id, plz.text_val AS plz, name.text_val AS name,
>>>      
>> typ.text_val AS typ
>>    
>>> FROM geodb_textdata gtv
>>> LEFT JOIN geodb_textdata name ON gtv.loc_id = name.loc_id
>>> LEFT JOIN geodb_textdata typ ON gtv.loc_id = typ.loc_id
>>> LEFT JOIN geodb_textdata plz ON gtv.loc_id = plz.loc_id
>>> WHERE name.text_type = 500100000 /* Name */
>>>   AND plz.text_type = 500300000 /* Postleitzahl */
>>>   AND typ.text_type = 400300000 /* Typ */
>>>   AND gtv.text_type = 400100000 /* Teil von */
>>>   AND gtv.text_val = '485' /* loc_id des Landkreis Pinneberg */;
>>>
>>> Laut meinem Verständnis werden hier nur Ergebnisse angezeigt, die alle
>>>      
>> Bedingungen erfüllen, d.h. nur Orte, die einen Eintrag einer PLZ haben UND
>> einen Eintrag für Typ (also "Markt" z.B.) haben usw.
>>    
>>> Da ich aber auch in meiner Ergebnis-Liste die Ortsteile haben möchte
>>>      
>> (und die haben nun mal keinen Typ-Eintrag) muss ich den Typ bei der ersten
>> Abfrage weglassen und dann bei der Auflistung der Ergebnisse mit einer
>> zweiten SQL-Abfrage mir den Typ anzeigen lassen (sofern existent).
>>    
>>> Wie ist es möglich, mit einer einzigen Abfrage das zu bewerkstelligen?
>>>      
>> (Kenn mich schon einigermaßen mit PHP und MySQL aus, aber JOINS waren mir
>> bis dato noch fremd...)
>>    
>>> Grüße
>>> Gatzhammer Bernhard
>>>
>>>  
>>>      
>> --
>> Mailingliste OpenGeoDB
>> Listenadresse: opengeodb@...
>> Informationen: http://opengeodb.de
>> Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)
>>    

--
Mailingliste OpenGeoDB
Listenadresse: opengeodb@...
Informationen: http://opengeodb.de
Mit freundlicher Unterstütztung von php::bar (http://phpbar.de)