Php SQL和WordPress:使用SQL提取两个自定义字段
WordPress wp_Posteta表构造为键/值对:Php SQL和WordPress:使用SQL提取两个自定义字段,php,sql,wordpress,Php,Sql,Wordpress,WordPress wp_Posteta表构造为键/值对: ID | meta_key | meta_value 我需要获得结果集中两个meta_键的值: 房地产拉特和房地产拉特 然后,我将使用这些值来评估给定点的半径。一个结果集中有两个值: 一行中有两个值: 早产儿的解决方案永远无法同时获得所有纬度/经度对。它一次只能为您获取一个ID的配对。我不是SQL方面的专家,无法保证这会立即生效,但我认为您正在寻找这样的东西: SELECT tbl.ID, lat.meta_value, lng.me
ID | meta_key | meta_value
我需要获得结果集中两个meta_键的值:
房地产拉特和房地产拉特
然后,我将使用这些值来评估给定点的半径。一个结果集中有两个值: 一行中有两个值:
早产儿的解决方案永远无法同时获得所有纬度/经度对。它一次只能为您获取一个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
谢谢大家! 接近!但是我需要属性_lat和属性_long都在同一行中。1242-子查询返回多行显然您有多行具有相同的meta_键。所以你不能依赖它。从技术上讲,您可以使用限制1来避免此错误。但我想您需要使用ID来定位子查询中WHERE子句中的特定行。我已经修改了查询,而且它似乎可以工作。。。从wp_帖子中选择tbl.ID、lat.meta_value、lng.meta_value作为tbl-internal-JOIN-wp_-postmeta作为lat-ON-lat.post_ID=tbl.ID和lat.meta_-key='property_-lat'internal-JOIN-wp_-postmeta作为lng.post_ID=tbl.ID和lng.meta_-key='property_-long'限制0,30但是,我如何修改它,以便通过半径获得结果?这篇白皮书包含了SQL:我会用PHP来做,因为我在这方面做得更好。但您似乎已经用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