Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL和WordPress:使用SQL提取两个自定义字段_Php_Sql_Wordpress - Fatal编程技术网

Php SQL和WordPress:使用SQL提取两个自定义字段

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

WordPress wp_Posteta表构造为键/值对:

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