未知列' lat'在'字段列表'

时间:2014-06-27 09:53:34

标签: mysql sql wordpress

我使用wp_query函数调整add_filter非常多。

我从wordpress收到此错误:Unknown column 'lat' in 'field list'

最终的SQL输出如下:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.*, 
( 3959 * acos(
    cos( radians(52.486243) ) 
    * cos( radians( lat ) ) 
    * cos( radians( lng ) - radians(-1.890401) ) 
    + sin( radians(52.486243) ) 
    * sin( radians( lat ) ) 
) ) 
AS distance , lat AS  latitude , lng AS longitude 
FROM wp_posts  
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) 
INNER JOIN lat_lng_post ON wp_posts.ID = lat_lng_post.post_id 
WHERE 1=1  
AND ( wp_term_relationships.term_taxonomy_id IN (2) ) 
AND wp_posts.post_type = 'event' 
AND (wp_posts.post_status = 'publish') 
AND ( (wp_postmeta.meta_key LIKE 'date_%_start-date' AND CAST(wp_postmeta.meta_value AS SIGNED) <= '20140704')
AND (mt1.meta_key LIKE 'date_%_end-date' AND CAST(mt1.meta_value AS SIGNED) >= '20140627') ) 
AND lat_lng_post.lat = lat 
AND lat_lng_post.lng = lng 
AND substr(wp_postmeta.meta_key, 1, 6) = substr(mt1.meta_key, 1, 6)  
GROUP BY wp_posts.ID 
HAVING distance <= 18 
ORDER BY distance ASC 
LIMIT 0, 10

我认为AND lat_lng_post.lat = latAND lat_lng_post.lng = lng行会对未知列问题进行排序?

有谁知道查询有什么问题?

[编辑]

lat和lng是自定义表中wordpress db中的列。该表是使用以下方法制作的:

CREATE TABLE IF NOT EXISTS 'lat_lng_post' (
'post_id' bigint(20) unsigned NOT NULL,     
'lat' float NOT NULL,     
'lng' float NOT NULL   ) 
ENGINE=InnoDB;

[编辑2]

注意到SQL Query输出的错误与使用var_dump($wp_query->request)显示的SQL不同。

下面显示的错误是“未知列”&#39; lat&#39;在&#39;字段列表&#39;。

SELECT wp_posts.*, 
( 3959 * acos( 
    cos( radians(52.486243) ) 
    * cos( radians( lat ) ) 
    * cos( radians( lng ) - radians(-1.890401) ) 
    + sin( radians(52.486243) ) 
    * sin( radians( lat ) ) 
) ) AS distance , lat AS latitude , lng AS longitude 
FROM wp_posts 
WHERE 1=1 
AND wp_posts.post_type = 'acf-field' 
AND ((wp_posts.post_status = 'publish')) 
AND wp_posts.post_name = 'field_535e6b9ffe3da' 
AND lat_lng_post.lat = lat 
AND lat_lng_post.lng = lng 
GROUP BY wp_posts.ID 
HAVING distance <= 25 
ORDER BY distance ASC LIMIT 0, 1

这与我出于某种原因要查询的内容完全不同。

我不确定问题是否可能会被添加到查询中的add filter函数破坏它?

2 个答案:

答案 0 :(得分:1)

您在第一次编辑中指出lat列来自lat_lng_post,但是您尝试从wp_posts中选择它 - 它在该表中不存在,因此未知列错误。

我无法看到一种明显的方法来使查询与您提供的信息一起使用。

但是,如果还有另一种方法可以将lat_lng_post加入wp_posts,例如wp_posts.id匹配lat_lng.post_id你可以这样做,加入表然后从lat_lng投射相关的字段:

SELECT wp_posts.*, 
( 3959 * acos( 
    cos( radians(52.486243) ) 
    * cos( radians( lat_lng.lat ) ) 
    * cos( radians( lat_lng.lng ) - radians(-1.890401) ) 
    + sin( radians(52.486243) ) 
    * sin( radians( lat_lng.lat ) ) 
) ) AS distance , lat_lng.lat AS latitude , lat_lng.lng AS longitude 
FROM wp_posts INNER JOIN lat_lng 
ON (wp_posts.id = lat_lng.post_id)
WHERE 1=1 
AND wp_posts.post_type = 'acf-field' 
AND ((wp_posts.post_status = 'publish')) 
AND wp_posts.post_name = 'field_535e6b9ffe3da' 
GROUP BY wp_posts.ID 
HAVING distance <= 25 
ORDER BY distance ASC LIMIT 0, 1

答案 1 :(得分:0)

问题实际上不是SQL或数据库本身,而是使用add_filter函数将WordPress wp_query更改为上述代码。

在查询之后我需要remove_filter(),它解决了错误并将SQL保留原样。