我有一个for循环,循环遍历MySQL查询的结果数组。
该查询从已创建登录用户的表wait_times
中选择所有行,如下所示:
SELECT * FROM `wait_times` WHERE `user_id` = ?
我的问题是我需要检索每一行的场地信息。目前,我正在遍历该数组并将单个请求发送到foursquare以获取场地的信息。根据从查询返回的行数,此方法可能会非常慢。
为了加快速度,我计划将场所信息存储在单独的表中,这最终应该比向Foursquare API发送curl请求更快。
请告诉我是否还有其他方法可以加快此过程?
我调查了多个查询,但是用户可能没有Foursquare帐户,并且API要求用户注册并登录。
这是我的代码:
$query = $this->db->query("SELECT * FROM `wait_times` WHERE `user_id` = ?", array($uid));
$wait_times = $query->result();
foreach ($wait_times as $wait_time) {
$wait_time->venue = $this->venue_info($wait_time->venue_fq_id);
}
function venue_info($vid) {
$v = date('Ymd');
$url = "https://api.foursquare.com/v2/venues/{$vid}?client_id=" . FQ_CLIENT_ID . "&client_secret=" . FQ_CLIENT_SECRET . "&v={$v}";
curl_setopt($this->ch, CURLOPT_URL, $url);
$resp = curl_exec($this->ch) or die(curl_error($this->ch));
$json = json_decode($resp, TRUE);
if ($json['meta']['code'] == 400)
return FALSE;
$venue = $json['response']['venue'];
return $venue;
}
最佳答案
您可以进行某种形式的缓存吗?我强烈建议改用参考表。 FS可能对API请求有一些规定,您最终可能会被列入黑名单。由于多种握手,任何形式的HTTPS通信速度都很慢。如果可以的话,把时间花在桌子上。您甚至可以作弊并使用序列化的对象。