これは機能していますが、これが正しくないことはわかっています。
特定の半径と場所から近いすべての投稿 (収益として) を見つける必要がありますが、post_meta にある緯度と経度の情報をサブクエリする必要があります。
目が痛くなるので以下に。
/*
lat -23.6480147
lng -46.704116399999975
radius 20km
6371 para km e 3959 para miles
*/
SELECT vision_outlet.wp_posts.ID as 'ID',
vision_outlet.wp_posts.post_title as 'Nome',
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'formatted_address'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
) as 'formatted_address' ,
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'lat'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
) as 'lat',
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'lng'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
) as 'lng',
(
6371 * acos( cos( radians(-23.6480147) ) * cos( radians
(
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'lat'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
)
) ) * cos( radians
(
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'lng'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
)
) - radians(-46.704116399999975) ) + sin( radians(-23.6480147) ) * sin( radians
(
(
SELECT vision_outlet.wp_postmeta.meta_value
FROM vision_outlet.wp_postmeta
WHERE vision_outlet.wp_postmeta.meta_key = 'lat'
AND vision_outlet.wp_postmeta.post_id = vision_outlet.wp_posts.ID
)
) ) )
) as 'distance'
FROM vision_outlet.wp_posts, vision_outlet.wp_postmeta
WHERE vision_outlet.wp_posts.ID = vision_outlet.wp_postmeta.post_id
AND vision_outlet.wp_posts.post_status = 'publish'
AND vision_outlet.wp_postmeta.meta_key = 'formatted_address'
HAVING distance < 20
ORDER BY distance
問題は、新しいテーブルの作成を検討する必要があるか、またはこれをリファクタリングする方法はありますか?