Jetzt hab ich doch noch mal den Laptop rausgekramt, auf dem ich zur Zeit noch 'nen laufenden Webserver habe.
Ich habe das ganze noch etwas gekürzt und die WHERE-Klausel entfernt. Tut ja auch nicht Not, bei meinen 3 Testeinträgen.
Zuerst die schlechte Nachricht.
Ich habe die Syntaxfehler soweit raus, aber es klappt nicht:
PHP:
$onuser_query =mysql_query("SELECT
user_id,
user_membername,
(".$geo1_longitude."/360*2*PI()) AS Lo1,
(user_longitude/360*2*PI()) AS toLo2,
(".$geo1_latitude."/360*2*PI()) AS La1,
(user_latitude/360*2*PI()) AS toLa2,
((SIN(La1)*SIN(toLa2))+(COS(La1)*COS(toLa2)*COS(toLo2-Lo1)))
AS eTemp,
(ATAN(SQRT(1-(eTemp*eTemp)) /eTemp)) AS e,
(ROUND((ABS( 6378137*2*PI()* (360/(2*PI())*e))/360)/1000),0)
AS distance
FROM users
ORDER BY distance");
Fehlermeldung: 1054 Unknown column 'La1' in 'field list'
Nach Studium des MySQL-Manuals ist das zumindest nachzuvollziehen. Es steht zwar nicht direkt dort, dass man Aliasnamen nicht in weiteren Select-Ausdrücken verwenden darf, aber z.B. in der WHERE-Klausel ist es verboten, also vermutlich auch hier.
Und jetzt die gute Nachricht:
Es geht, wenn man alles in eine Anweisung schreibt:
PHP:
$onuser_query =mysql_query("SELECT
user_id,
(
ROUND(
(
ABS(
6378137*2*PI(
)
*
(
360/(
2*PI(
)
)
*
(
ATAN(
SQRT(
1
-
(
(
(
SIN(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
SIN(
(
user_latitude/360*2*PI(
)
)
)
)
+
(
COS(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
COS(
(
user_latitude/360*2*PI(
)
)
)
*
COS(
(
user_longitude/360*2*PI(
)
)
-
(
".$geo1_longitude."/360*2*PI(
)
)
)
)
)*(
(
SIN(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
SIN(
(
user_latitude/360*2*PI(
)
)
)
)
+
(
COS(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
COS(
(
user_latitude/360*2*PI(
)
)
)
*
COS(
(
user_longitude/360*2*PI(
)
)
-
(
".$geo1_longitude."/360*2*PI(
)
)
)
)
)
)
)
/
(
(
SIN(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
SIN(
(
user_latitude/360*2*PI(
)
)
)
)
+
(
COS(
(
".$geo1_latitude."/360*2*PI(
)
)
)
*
COS(
(
user_latitude/360*2*PI(
)
)
)
*
COS(
(
user_longitude/360*2*PI(
)
)
-
(
".$geo1_longitude."/360*2*PI(
)
)
)
)
)
)
)
)
)
/
360
)
/
1000
)
)
AS distance,
user_membername
FROM users
ORDER BY distance;");
Dazu muss man nur noch bedenken, dass ich mich bei ROUND geirrt habe, irgendwie kann man da doch keinen weiteren Parameter anfügen.
Du musst jetzt noch Dein WHERE wieder einfügen und Deine Konstante users für den Tabellennamen wieder einbauen. Das ganze musst Du dann anstelle des Queryaufrus in meinem letzten Skript einfügen. Das sollte es dann eigentlich gewesen sein.
Ich habe das ganze jetzt etwas extrem eingerückt, aber ich wollte den Überblick über die Klammern behalten. Du kannst gerne überflüssige Zeilenumbrüche und Leerzeichen entfernen
Gruß hpvw