1

私はクエリを持っています

SELECT ID, 
  post_title, 
  post_author,
  max(case when meta_key='geo_latitude' then meta_value end) latitude,
  max(case when meta_key='geo_longitude' then meta_value end) longitude,
 ( 3959 * acos( cos( radians(18.204540500000) ) 
                   * cos( radians( latitude ) ) 
                   * cos( radians( longitude ) 
                       - radians(-66.450958500000) ) 
                   + sin( radians(18.204540500000 ) )
                   * sin( radians( latitude ) ) 
                 )
   ) AS distance 
FROM `wp_posts` 
LEFT JOIN `wp_postmeta` 
  on ID=post_id 
WHERE post_type='place' 
  AND (meta_key='geo_latitude' OR meta_key='geo_longitude') 
GROUP BY ID, post_title, post_author
ORDER BY ID ASC

その結果、

Error Code: 1054. Unknown column 'latitude' in 'field list'

内部/ネストされたクエリを使用せずにこれを解決する方法はありますか?

4

2 に答える 2

1

ビューを作成できます。

create view geo as
    select id, post_title, post_author,
           max(case when meta_key='geo_latitude' then meta_value end) as latitude,
           max(case when meta_key='geo_longitude' then meta_value end) as longitude
    from wp_posts
    where post_type='place'
          and (meta_key='geo_latitude' OR meta_key='geo_longitude')
    group by id, post_title, post_author;

wp_postsの代わりにクエリを結合します。

SELECT ID, 
  post_title, 
  post_author,
  latitude,
  longitude,
 ( 3959 * acos( cos( radians(18.204540500000) ) 
                   * cos( radians( latitude ) ) 
                   * cos( radians( longitude ) 
                       - radians(-66.450958500000) ) 
                   + sin( radians(18.204540500000 ) )
                   * sin( radians( latitude ) ) 
                 )
   ) AS distance 
FROM `geo` 
LEFT JOIN `wp_postmeta` 
  on ID=wp_postmeta.post_id 
ORDER BY ID ASC;
于 2012-11-06T13:09:22.603 に答える
1

これを試して:

SELECT ID, 
  post_title, 
  post_author,
  MAX(CASE WHEN meta_key='geo_latitude' THEN meta_value END) latitude,
  MAX(CASE WHEN meta_key='geo_longitude' THEN meta_value END) longitude, 
  ( 3959 * ACOS( COS( RADIANS(18.204540500000) ) 
                   * COS( RADIANS( MAX(CASE WHEN meta_key='geo_latitude' THEN meta_value END) ) ) 
                   * COS( RADIANS( MAX(CASE WHEN meta_key='geo_longitude' THEN meta_value END) ) 
                       - RADIANS(-66.450958500000) ) 
                   + SIN( RADIANS(18.204540500000 ) )
                   * SIN( RADIANS( MAX(CASE WHEN meta_key='geo_latitude' THEN meta_value END) ) ) 
                 )
   ) AS distance  
FROM `wp_posts` 
LEFT JOIN `wp_postmeta` 
  ON ID=post_id 
WHERE post_type='place' 
  AND (meta_key='geo_latitude' OR meta_key='geo_longitude') 
GROUP BY ID, post_title, post_author
ORDER BY ID ASC
于 2012-11-06T14:12:38.660 に答える