MySQL查询代码修复

时间:2015-04-13 04:11:10

标签: mysql

$query = "SELECT users.*, ROUND((DEGREES(ACOS(SIN(RADIANS('$lat')) * SIN(RADIANS(users.lat)) + COS(RADIANS('$lat')) * COS(RADIANS(users.lat)) * COS(RADIANS('$lng' - users.lng))))) * 60 * 1.1515 * 1.60934 * 1000) AS distance FROM users";
$query .= " ORDER BY distance ASC";

任何人都可以帮我修复此代码吗?基本上users.lat和users.lng不是我想要的,我希望它们是当前所选行的值,但函数可能会计算这些列的所有行? 例如:

SELECT users.*, RADIANS(users.lat) AS v1, RADIANS(44.4121) AS v2 FROM users WHERE id=1

v1和v2具有不同的值,44.4121是该行具有的lat值。如何更改我的代码才能正常工作并只计算当前行?我以前从未使用过像这样的复杂查询,所以我不确定最好的方法是什么。

谢谢!

1 个答案:

答案 0 :(得分:1)

将sqlfiddle.com中的表创建更改为:

CREATE TABLE users
    (`lat` float(53))
;

INSERT INTO users
    (`lat`)
VALUES
    (44.4121)
;

我不确定您正在寻找什么级别的精确度,但是使用float(53)数据类型,您应该获得所需的所有可读精度