Question

I've the query

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

which results in

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

Is there any way to solve this without using inner/nested queries?

Was it helpful?

Solution

Try this:

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

OTHER TIPS

You can create a view:

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;

and join your query with it instead of 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;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top