我使用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 = lat
和AND 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
函数破坏它?
答案 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保留原样。