Possible Duplicate:
How to query posts based on lat-lng coordinate as post meta?
我想创建一个$wpdb查询,以选择当前坐标(lat和$long)附近最近的位置(自定义post类型),但我无法同时获得两个自定义字段值(wpfc纬度和wpfc经度)。。。
如何更改查询以获得经度?
SELECT $wpdb->posts.ID, $wpdb->posts.post_title, $wpdb->terms.name, $wpdb->postmeta.meta_value AS latitude
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->postmeta.meta_key = \'wpcf-latitude\'
AND $wpdb->posts.post_status = \'publish\'
AND $wpdb->posts.post_type = \'places\'
AND $wpdb->term_taxonomy.taxonomy = \'countries\'
更新-固定查询由于s\\u ha\\u dum,我成功地获得了这两个值,现在我可以计算距离并对结果排序。我的最后一个问题是:SELECT $wpdb->posts.ID, $wpdb->posts.post_title, $wpdb->terms.name, wpcflat.meta_value AS latitude, wpcflong.meta_value AS longitude,
6371 * 2 * ASIN ( SQRT (POWER(SIN(($lat - wpcflat.meta_value)*pi()/180 / 2),2) + COS($lat * pi()/180) * COS(wpcflat.meta_value *pi()/180) * POWER(SIN(($long - wpcflong.meta_value) *pi()/180 / 2), 2) ) ) as distance
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta as wpcflong ON ($wpdb->posts.ID = wpcflong.post_id)
LEFT JOIN $wpdb->postmeta as wpcflat ON ($wpdb->posts.ID = wpcflat.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->posts.ID NOT IN ($post->ID)
AND wpcflat.meta_key = \'wpcf-latitude\'
AND wpcflong.meta_key = \'wpcf-longitude\'
AND $wpdb->posts.post_status = \'publish\'
AND $wpdb->posts.post_type = \'places\'
AND $wpdb->term_taxonomy.taxonomy = \'countries\'
ORDER BY distance
LIMIT 20
要加载的查询是否繁重?你知道有没有办法优化它吗?