3

WordPresswp_postmeta表构造为键/值对:

ID | meta_key | meta_value

我需要在结果集中获取两个 meta_keys 的值:

property_latproperty_long

然后我将使用这些值来评估给定点的半径。

4

3 回答 3

1

一个结果集中的两个值:

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
于 2012-12-20T23:36:14.340 回答
0

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
于 2012-12-21T11:39:30.667 回答
0

在您的帮助下,我能够构建我的查询:

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

谢谢!

于 2012-12-21T19:53:06.943 回答