Goal:
I am trying to convert a store locator plugin from it's own table to using the posts/postmeta tables. Using JOINs, I believe I can filter posts (locations) based on distance. My problem is my recordset would only contain those meta_values added in the join. I need to retrieve all the relevant meta_values for a location (e.g. address, phone, state, city).
How can I get a recordset to while ($row = mysql_fetch_assoc($result)) that has all the relevant key/values without 20 JOINS? If I did 20 JOINS wouldn't it degrade performance?
Current code:
$query = sprintf("
SELECT * , ( 3959 * acos( cos( radians('%s') ) * cos(
radians( latitude.meta_value ) ) * cos( radians(
longitude.meta_value ) - radians('%s') ) + sin(
radians('%s') ) * sin( radians( latitude.meta_value ) ) ) ) AS distance
FROM $tf_posts
LEFT JOIN $tf_postmeta AS latitude ON(
$tf_posts.ID = latitude.post_id
AND latitude.meta_key = 'lat'
)
LEFT JOIN $tf_postmeta AS longitude ON(
$tf_posts.ID = longitude.post_id
AND longitude.meta_key = 'lng'
)
WHERE $tf_posts.post_status = 'publish'
HAVING distance < '%s'
ORDER BY distance";
Yes, I've looked at http://wordpress.org/support/topic/237079?replies=6
http://wordpress.org/support/topic/161154?replies=10 and others.