Hallo,
ich habe eine DB mit einer Spalte (direction), die Gradzahlen enthält (0-360°) als Double Werte.
Ich bekomme von meiner Anwendung einen Grad-Wert x und möchte nun alle Einträge haben, wo direction - 10 <= x <= direction + 10 ist.
Momentan sieht meine Anfrage so aus:
Das läuft soweit ok, nur bei nicht-integer-Werten für $X gibt er "invalid syntax for integer" aus. Warum brauche ich denn da zwingend einen Integer-Wert? Und wie geht das anders?Code:SELECT * FROM table WHERE (abs(direction - $X) <= 10) OR (abs(direction - $X -360) <= 10) OR (abs(direction - $X +360) <= 10)
Ich habe auch PostGIS zu laufen, falls es da schon sowas wie eine Kompass-Funktion gibt, was ich glatt vermutet hätte. Hab aber keine gefunden.
Gruß S-Man
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Nachtrag: vielleicht kannst/solltest Du auch mit Funktionen wie degrees(), radians() und pi() hantieren, um Winkel (um die es ja geht) besser darzustellen. Das könnte Dir das rumgemache mit den Fallunterscheidungen ersparen.
Andreas, zu lange aus der Schule, um das genau mathematisch herbeten zu können ...
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Nein, ist schon ein PunktDie Fehlermeldung bezieht sich ausdrücklich auf integer.
Danke für den Hinweis mit den Funktionen. Werd mal schauen, ob mir das was bringt.
Ich hab versucht, diese Fehlermeldung zu provozieren. Ohne Erfolg. Am nächsten war da noch:
AndreasCode:test=*# SELECT * FROM kompass WHERE (abs(direction - 9,1) <= 10) OR (abs(direction - 9,1 -360) <= 10) OR (abs(direction - 9,1 +360) <= 10); ERROR: function abs(double precision, integer) does not exist ZEILE 1: SELECT * FROM kompass WHERE (abs(direction - 9,1) <= 10) OR ...
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hm, vllt liegts doch am PHP-Code, aber das wär komisch, da die Fehlermeldung tatsächlich nur kommt, wenn ich die SQL Anweisung so baue... Momentan helfe ich mir mit einem round(), was nicht so viel ausmacht. Aber doof isses schon. mit trigonometrie komme ich imho nicht weiter, glaube ich, da ich ja Winkel habe und keine Strecken brauche, sondern einen neuen Winkel...
Ich kann ja mal den kompletten code zeigen:
Code:$query = pg_query_params(" SELECT * FROM table WHERE ((abs(direction - $1) <= 9) OR (abs(direction - $1 -360) <= 9) OR (abs(direction - $1 +360) <= 9))", array( round($_POST['orientation'])))
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ohne round im php-teil, der ja mein WorkAround ist, kommt das gewünschte zurück, solange
$_POST['orientation'] ein integer ist,
sonst diese Fehlermeldung:
Warning: pg_query_params() [function.pg-query-params]: Query failed: ERROR: invalid input syntax for integer: "3.2" in download_screen.php on line
Hilft das?
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ja, davon rede ich ja die ganze Zeit
Ich verstehe nicht, warum man einen Integer braucht. Ich wüsste gern, wie das mit Doubles funktioniert![]()
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen