0

MySQLクエリの結果の配列をループするforループがあります。

クエリwait_timesは、ログインしたユーザーが作成したテーブルからすべての行を選択します。これは次のとおりです。

SELECT * FROM `wait_times` WHERE `user_id` = ?

私の問題は、各行の会場情報を取得する必要があることです。現在、私はその配列をループして、会場の情報を求める個別のリクエストをfoursquareに送信しています。このメソッドは、クエリから返された行の量によっては非常に遅くなる可能性があります。

これを高速化するために、会場情報を別のテーブルに保存することを計画しています。これは、最終的には、FoursquareAPIに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;

}
4

1 に答える 1

1

なんらかのキャッシュを行うことができますか?代わりに参照テーブルに切り替えることを強くお勧めします。FSにはAPIリクエストに関するルールがあり、ブラックリストに登録される可能性があります。複数のハンドシェイクがあるため、HTTPS通信の形式はどれも低速です。可能であれば、時間をテーブルに投資してください。シリアル化されたオブジェクトをごまかして使用することもできます。

于 2012-09-05T20:26:35.387 に答える