Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在派生表概念中转换此查询_Mysql_Distance_Latitude Longitude - Fatal编程技术网

Mysql 如何在派生表概念中转换此查询

Mysql 如何在派生表概念中转换此查询,mysql,distance,latitude-longitude,Mysql,Distance,Latitude Longitude,更新: 如何在派生表中引入以下查询 3959*acos cos radians36.247137*cos radians cm.lat*cos radians scm.lng-弧度-115.221032+正弦弧度36.247137*正弦弧度cm.lat作为距离 在此MySql查询中: MySql查询: SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`

更新:

如何在派生表中引入以下查询

3959*acos cos radians36.247137*cos radians cm.lat*cos radians scm.lng-弧度-115.221032+正弦弧度36.247137*正弦弧度cm.lat作为距离

在此MySql查询中:

MySql查询:

SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM  `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM  `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
但当我添加Having子句时,下面的查询结果为空

SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, (pl.price_pure) as minPrice, (pl.price_pure) as maxPrice, (pl.`squarefeet_pure`) as minSquare, (pl.`squarefeet_pure`) as maxsquare FROM  `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
更新: 如果我要从查询中删除max,min公式,那么它也会给我400个结果。

是一个在生成查询行后应用的子句。由于查询中有聚合函数,但没有GROUPBY,因此mysql为您提供单个样本距离结果,然后是整个数据集的最小值和最大值

在那之后,having子句被应用了——正如@krishnpatel指出的,1754<20是假的,所以这一行被删除了,剩下的是一无所有


在您的选择中添加一个分组依据,相当于您的距离计算,以返回您要查找的结果。

首先收集20英里内属性的ID

然后将其用作子查询并连接到主表以执行其余操作:

SELECT MIN(...), ...
    FROM ( SELECT id FROM tbl WHERE ... < 20 ) AS x
    JOIN tbl ON x.id = tbl.id;

没有,没有分组,除非我错过了一些东西。

你能试着用where代替吗?@krishnpatel它的虚拟场和我的东西where不能在这里应用。我还尝试了before.CASTDistansc登录,与distance一样未签名。你能试试吗?距离<20表示1754.34<20是假的。你应该写>来得到这个data@krishnpatel我想找到20英里以内的结果。。那不应该超过20英里。。
SELECT MIN(...), ...
    FROM ( SELECT id FROM tbl WHERE ... < 20 ) AS x
    JOIN tbl ON x.id = tbl.id;