WordPress的兩個自定義字段:SQL和WordPress:提取<code>wp_postmeta</code>表的構造鍵/值對SQL
ID | meta_key | meta_value
我需要在結果集中獲得兩個meta_keys值:
property_lat
和property_long
然後,我將使用這些值來評估給定點的半徑。
WordPress的兩個自定義字段:SQL和WordPress:提取<code>wp_postmeta</code>表的構造鍵/值對SQL
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
早產的解決方案不能讓你所有的緯度/經度對一次。它一次只能給你一個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
我修改了查詢,它似乎工作...'SELECT tbl.ID,lat.meta_value,lng.meta_value FROM wp_posts AS TBL INNER JOIN wp_postmeta AS LAT ON lat.post_id = tbl.ID AND lat.meta_key = 'property_lat' INNER JOIN wp_postmeta AS LNG ON lng.post_id = tbl.ID AND lng.meta_key = '' property_long LIMIT 0 ,30'但是,我怎麼修改這個以便我可以通過半徑得到結果?本白皮書包含SQL:http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL – dcolumbus
我只是在PHP中這樣做,因爲我在這方面做得更好。但你似乎已經用SQL解決了這個問題,我猜想它更有效率:) –
有了您的幫助,我是能夠建立我的查詢:
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
謝謝!
關閉!但我需要'property_lat'和'property_long'在同一行內。 – dcolumbus
「#1242 - 子查詢返回多於一行」 – dcolumbus
顯然,您有多個具有相同meta_key的行。因此你不能依賴它。技術上你可以利用LIMIT 1來避免這個錯誤。但我想你需要使用ID來定位WHERE子句中的特定行在子查詢 – peterm