UNION und ORDER BY Problem

Hallo ich habe ein kleines Problem mit UNION:

ich habe eine uhrsprüngliche sql abfrage, die mir die nächsten punkte in meinem umfeld zurück gibt (diese funktioniert auch ohne probleme):

ELECT name, type, ST_Distance(ST_SetSRID(st_makepoint($newcenter1,$newcenter2),4326), ST_SetSRID(the_geom,4326),true), 	   	                          ST_Y(ST_SetSRID(the_geom,4326)), ST_X(ST_SetSRID(the_geom,4326)) 
from points 
where st_dwithin(st_makepoint($newcenter1,$newcenter2), the_geom, $newdistance, true) AND name IS NOT NULL AND type = '$newproxType' 
ORDER BY ST_Distance(ST_SetSRID(st_makepoint($newcenter1, $newcenter2),4326), ST_SetSRID(the_geom,4326)), name 
LIMIT 50

nun füge ich mit UNION eine weitere abfrage für ein zweites schema hinzu und order dann am ende:

SELECT  * 
FROM (SELECT name, type, ST_Distance(ST_SetSRID(st_makepoint($newcenter1,$newcenter2),4326), ST_SetSRID(the_geom,4326),true), ST_Y(ST_SetSRID(the_geom,4326)), ST_X(ST_SetSRID(the_geom,4326)) 
from points 
where st_dwithin(st_makepoint($newcenter1,$newcenter2), the_geom, $newdistance, true) AND name IS NOT NULL AND type = '$newproxType' 
UNION
SELECT name, type, ST_Distance(ST_SetSRID(st_makepoint($newcenter1,$newcenter2),4326), ST_SetSRID(the_geom,4326),true), ST_Y(ST_SetSRID(the_geom,4326)), ST_X(ST_SetSRID(the_geom,4326)) 
from userfeatures.points 
where st_dwithin(ST_SetSRID(st_makepoint($newcenter1,$newcenter2),4326), ST_SetSRID(the_geom,4326), $newdistance, true) AND name IS NOT NULL AND type = '$newproxType' ) t
ORDER BY ST_Distance(ST_SetSRID(st_makepoint($newcenter1, $newcenter2),4326), ST_SetSRID(the_geom,4326)), name 
LIMIT 150

jedoch bekomm ich dann immer diese Fehlermeldung(obwohl the_geom eigentlich existiert und es auch beim suchen eines schemas funktioniert…):

Warning: pg_query(): Query failed: ERROR: column "the_geom" does not exist LINE 10: ..._makepoint(8.178479, 53.139927),4326), ST_SetSRID(the_geom,4... ^ in /Applications/XAMPP/xamppfiles/htdocs/prototype1/proximitySearch.php on line 43
Abfrage fehlgeschlagen: ERROR: column "the_geom" does not exist LINE 10: ..._makepoint(8.178479, 53.139927),4326), ST_SetSRID(the_geom,4... ^

hat jemand eine idee was ich falsch mache?

Vielen Dank im Vorraus

Michael Hecht

Die Fehlermeldungen von PostgreSQL sind meistens richtig.

Führe die Abfrage mal für sich alleine aus, geht es da?

Im übrigen scheinen gezeigte Abfrage und Fehlermeldung aus 2 unterschiedlichen Universen zu kommen, da die Abfrage aus der Fehlermeldung so nicht oben steht. (suche nach 8.17 findet das nur in der Fehlermeldung.)

Nun, er findet die Spalte ‘the_geom’ nicht. Ist die denn vorhanden in userfeatures.point? Oder heisst die vielleicht nur ‘geom’ (was das neuere default ist). Im ersten Teil gehts ja anscheinend.

Gruß Uwe

Zu 1.: Ja die Abfrage ohne das order by funktioniert, das bedeutet doch das er in beiden schemas die the_geom gefunden haben muss…

Zu 2.: Doch ich denke schon, das die Fehlermeldung daher stammt, da das “order by” definitiv die Ursache ist… (in der Fehlermeldung werden die Variablen ja nur als definierte Werte angezeigt…) :slight_smile:


Wie oben Zu 1. Irgendwie scheint er es bei dem Order By nicht mehr zu finden :frowning: alsob es da nichtmehr sichtbar ist…


EDIT: Ich glaube ich weis was vielleicht einfacher währe. Kann ich in der Abfrage dem Ergebnis der Distance Funktion eine Variable zuordnen und sie beim order by abfragen zum sortieren?

Vielen Dank aber schonmal für Eure Zeit und hilfe! :slight_smile:

Vermutlich weil Du da ja eine Funktion aufrufst, die eine Spalte mit einem Namen liefert, die i.d.R. den Namen der Funktion hat. Also hast Du im Result nicht mehr die Spalte the_geom, sondern ST_SetSRID (in Kleinbuchstaben).

Achso ja das ist es mit sicherheit, kann ich dem irgendwie eine Variable oder einem Namen zuordnen?

ja, select …, funktion() as mein_name, … from …

Wunderbar das hat geklappt.
Vielen Dank! :slight_smile: