我正在为一家公司执行“查找经销商”查找,以便用户可以输入邮政编码和半径并找到该半径内的所有经销商。
在我获得几千个邮政编码之前,它似乎工作正常。
我将邮政编码数组传递给 meta_query
并根据我的自定义帖子类型进行检查 dealer
及其 key
的 zip
查找邮政编码包含在 $zip_array
中的所有经销商.
<?php
// This takes in a zip code and returns all zip codes in a specific radius
// using the zip code api: https://www.zipcodeapi.com/API#radius
$api_root = 'https://www.zipcodeapi.com/rest';
$api_key = $ZIP_CODE_API_KEY;
$zip_radius = isset($_POST['radius']) ? $_POST['radius'] : 25;
$zip_code = $_POST['zip'];
$type = isset($_POST['type']) ? $_POST['type'] : array('architectural','auto','safety-security');
$api_url = $api_root.'/'.$api_key.'/radius.json/'.$zip_code.'/'.$zip_radius.'/miles?minimal';
$curl = curl_init($api_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additional info: ' . var_export($info));
}
// Because all zip codes come back as strings, we set up an array to push
// the new zip code integers into
$zip_array = array();
// Decode response for easy looping
$curl_response = json_decode($curl_response);
// var_dump($curl_response);
// Change zip code strings to integers and push into zip_array
foreach ($curl_response as $zipcode) {
foreach ($zipcode as $the_zip) {
array_push($zip_array, intval($the_zip));
}
}
$meta_query_args = array(
'post_type' => 'dealer',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'zip',
'value' => $zip_array,
'compare' => 'IN',
'type' => 'NUMERIC'
)
),
'tax_query' => array(
array(
'taxonomy' => 'types',
'field' => 'slug',
'terms' => $type
)
)
);
$meta_query = new WP_Query( $meta_query_args );
?>
在那之后,我只是在做标准的loop
和 HTML
并在页面上呼应出所有经销商信息。 API 正在按原样返回所有邮政编码,所有内容都按原样显示并快速显示,但我注意到当我将半径设置为 100 miles
时,对于美国东北部的一些邮政编码,它返回超过 2500 个邮政编码。
例如,19804 在 75 英里处返回大约 1200 个邮政编码并正确显示 9 个经销商。 100 英里处的 19804 返回大约 2200 个邮政编码,显示循环命中 else
并表示没有经销商匹配该数据。
在仅返回 1000 左右的其他邮政编码处 100 英里返回数据并正确显示。
这只是一个必须检查太多邮政编码的情况,还是我偏离了方向,这是完全不同的事情?
最佳答案
发现问题。我检查了 WordPress debug.log
并看到了 Query Killed
。用 Google 搜索该问题,发现在 WP Engine
托管上,它们限制了特定大小的查询。
因此,在 wp-config
中,我添加了行 define( 'WPE_GOVERNOR', false );
并且取消了 WP Engine 的查询限制。
关于mysql - 元查询在数据过多时不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53873530/