创建为Query运行时创建列的未知列Haversine查询

时间:2015-06-05 08:36:16

标签: php mysql

我有一个结果表,看起来像这样(目前只有1个结果): enter image description here

这是我产生该结果的查询:

SELECT DISTINCT 
ID, post_author, post_title, post_type, post_status,
max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN
escort_details.meta_value END) AS longitude,
max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN
escort_details.meta_value END) AS latitude
FROM wp_posts as escorts 
INNER JOIN wp_postmeta as escort_details
WHERE escorts.post_type = 'escorts'
AND escorts.post_status = 'publish'

我在运行查询时创建经度和纬度列但我想搜索这些列并返回与查询的其他部分(即半边部分)的距离。

所以我的完整查询现在看起来像这样:

SELECT DISTINCT 
ID, post_author, post_title, post_type, post_status,
max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN
escort_details.meta_value END) AS longitude,
max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN
escort_details.meta_value END) AS latitude,
( 3959 * acos( cos( radians("121.184006") ) * cos( radians( latitude ) ) 
* cos( radians( longitude ) - radians("14.817371") )
+ sin( radians("121.184006") ) * sin(radians(latitude)) ) ) AS distance
FROM wp_posts as escorts 
INNER JOIN wp_postmeta as escort_details
WHERE escorts.post_type = 'escorts'
AND escorts.post_status = 'publish'

我收到的错误是"未知列'经度'在'字段列表'"这是有道理的,因为在数据库中没有真正的经度字段,因为它会在查询运行时创建。

我想知道是否有人知道如何解决这个问题?

一如往常,任何帮助都会受到赞赏。

谢谢, Codarz360

1 个答案:

答案 0 :(得分:1)

您不能在执行其他计算时使用别名。一种方法是编写外部查询以获取字段列表,然后进行计算

select
distinct
ID, post_author, post_title, post_type, post_status,longitude,latitude,
( 3959 * acos( cos( radians("121.184006") ) * cos( radians( longitude ) ) 
* cos( radians( latitude ) - radians("14.817371") )
+ sin( radians("121.184006") ) * sin(radians(longitude)) ) ) AS distance
from (
 SELECT  
 ID, post_author, post_title, post_type, post_status,
 max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN
 escort_details.meta_value END) AS longitude,
 max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN
 escort_details.meta_value END) AS latitude
 FROM wp_posts as escorts 
 INNER JOIN wp_postmeta as escort_details
 WHERE escorts.post_type = 'escorts'
 AND escorts.post_status = 'publish'
)x