WordPresswp_postmeta
表构造为键/值对:
ID | meta_key | meta_value
我需要在结果集中获取两个 meta_keys 的值:
property_lat
和property_long
然后我将使用这些值来评估给定点的半径。
一个结果集中的两个值:
SELECT *
FROM wp_postmeta
WHERE meta_key IN ('property_lat', 'property_long')
一行中的两个值:
SELECT (SELECT meta_value FROM wp_postmeta WHERE meta_key='property_lat' LIMIT 1) AS lat,
(SELECT meta_value FROM wp_postmeta WHERE meta_key='property_long' LIMIT 1) AS lng
Preterm 的解决方案永远无法一次获得所有纬度/经度对。它一次只能为您提供一个 ID 的一对。我在 SQL 方面不够专业,无法保证这会立即起作用,但我认为您正在寻找这样的东西:
SELECT tbl.ID, lat.meta_value, lng.meta_value
FROM wp_postmeta AS tbl
INNER JOIN wp_postmeta AS lat ON lat.ID = tbl.ID AND lat.meta_key='property_lat'
INNER JOIN wp_postmeta AS lng ON lng.ID = tbl.ID AND lng.meta_key='property_long'
WHERE meta_key IN ('property_lat', 'property_long')
GROUP BY tbl.ID
在您的帮助下,我能够构建我的查询:
SET @centerLat = '48.428289';
SET @centerLng = '-123.380585';
SELECT wp_posts.*,
( 3959 * acos( cos( radians( @centerLat ) ) * cos( radians( lat.meta_value ) ) * cos( radians( lng.meta_value ) - radians(@centerLng) ) + sin( radians( @centerLat ) ) * sin( radians( lat.meta_value ) ) ) ) AS distance
FROM wp_posts
LEFT JOIN wp_postmeta AS lat
ON lat.post_id = wp_posts.ID
AND lat.meta_key = 'property_lat'
LEFT JOIN wp_postmeta AS lng
ON lng.post_id = wp_posts.ID
AND lng.meta_key = 'property_long'
WHERE lat.meta_key IS NOT NULL
HAVING distance > 5
LIMIT 0 , 20
谢谢!