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:
SELECT * FROM table WHERE
(abs(direction - $X) <= 10) OR (abs(direction - $X -360) <= 10) OR (abs(direction - $X +360) <= 10)
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?
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.
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 …
Ich hab versucht, diese Fehlermeldung zu provozieren. Ohne Erfolg. Am nächsten war da noch:
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 ...
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:
$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'])))
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