您真的只需要将纬度子查询与经度子查询分开即可。现在我有更多时间,我将更明确地修改查询:
SELECT
/* You're only interested in the wp_posts data, right? */
/* You don't care about the data from wp_postmeta. */
/* Only select the data you're actually going to use. */
/* Ideally you'd specify each column in wp_posts that you're */
/* going to use and ignore the rest */
p.*
FROM
wp_posts p
JOIN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'latitude' AND CAST(meta_value AS DECIMAL) BETWEEN 47.3641471102 AND 47.3731524898) lat ON p.id = lat.post_id
JOIN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'longitude' AND CAST(meta_value AS DECIMAL) BETWEEN 8.53253429117 AND 8.54583070883) long ON p.id = long.post_id
ORDER BY
post_id ASC
...由于没有单个 wp_postmeta 记录既是纬度又是经度,因此您不能(至少,不像这样简单)在同一个 WHERE 子句中匹配它们。因此,相反,对 wp_postmeta 表创建两个单独的调用,一个用于纬度,一个用于经度,然后强制它们都匹配(因此是INNER JOIN,而不是 a LEFT JOIN)