一個PHP腳本,通過curl先獲取百度地圖api生成的經緯度,然后改數據庫內的數據。


 

重要:在這個腳本里有一個order by的排序。 加了order by

SELECT kgId,provinceId,kgName FROM kindgartenbak WHERE deleteFlag = 1 AND STATUS = 2 AND runflag = 0 ORDER BY kgId DESC LIMIT 100;執行時間:0.678sec

 

 

SELECT kgId,provinceId,kgName FROM kindgartenbak WHERE deleteFlag = 1 AND STATUS = 2 AND runflag = 0 LIMIT 100;執行時間:0.002sec

 

在優化以后  之前需要將近兩個小時的執行時間,立馬節省了一個小時!!!!!!   

就一個 order by  !!!!!!!!    作用真大!

 

今天寫一個PHP腳本,目的是讓先從數據庫拿取響應的地區名  然后通過幼兒園的名字來查詢准確的經緯度。此間每次生成的經緯度進入數據庫內的更改。

7萬多條數據用時一個小時執行完畢。 不得不說 用curl結果還是比file_getcoents快的多。話不多說直接上代碼

<?php
date_default_timezone_set('Asia/Chongqing');
header('content-type:text/html; charset=utf-8');
ini_set('display_errors', 1);
error_reporting(E_ALL);
set_time_limit(0);

/**
 * @author  gf
 * 獲取經緯度修改數據
 * Class Importkindgarten
 */
class Importkindgarten
{

    private $dbhost = '127.0.0.1';
    private $dbuser = 'root';
    private $dbpw = '123';
    private $dbname = 'mypolyguide';

    private $dbcharset = 'utf8';
    private $write_db = null;

    public function __construct()
    {
        $this->db_write_link();
    }

    /**
     * 連接數據庫
     * @return null|resource
     */
    public function db_write_link()
    {
        $this->write_db = mysql_connect($this->dbhost, $this->dbuser, $this->dbpw);
        if (!$this->write_db) {
            die('Could not connect: ' . mysql_error());
        }
        mysql_query('SET character_set_connection=' . $this->dbcharset . ', character_set_results=' . $this->dbcharset . ', character_set_client=binary', $this->write_db);
        mysql_query('SET names utf8', $this->write_db);
        mysql_select_db($this->dbname, $this->write_db);

        return $this->write_db;
    }

    /**
     * 執行死循環進行查詢修改
     */
    public function roundKgList()
    {
        $i = 0;
        while(true)
        {
            $res = $this->getKgList();
            if(empty($res['kgdata']))
            {
                break;
            }
            else
            {
                if(!empty($res['kgdata'])) foreach($res['kgdata'] as $k1=>$v1)
                {
                    $info = $this->getAreanameById($v1['provinceId']);
                    $area = $info[0];
                    $address=$v1['kgName'];
                    $returnArr = $this->curlGetWeb($area,$address);
                    $kgPosition = implode(',',$returnArr);
                    $updatesql = "UPDATE kindgartenbak SET lng='{$returnArr['lng']}', lat='{$returnArr['lat']}', kgPosition='{$kgPosition}',runflag='1' WHERE kgId={$v1['kgId']}";
                    mysql_query($updatesql, $this->write_db);
                    $i++;
                }
                else
                {
                    break;
                }
            }
        }
    }

    /**
     * 獲取列表
     * @return mixed
     */
    public function getKgList()
    {
        $sql = 'SELECT kgId,provinceId,kgName FROM kindgartenbak WHERE deleteFlag = 1 AND status = 2 AND runflag = 0 ORDER BY kgId DESC LIMIT 100';
        $query = mysql_query($sql, $this->write_db);
        while($result = mysql_fetch_array($query,MYSQL_ASSOC))
        {
            $res['kgdata'][] = $result;
        }
        return $res;
    }

    /**
     * 拿取城市
     * @return mixed
     */
    public function getAreanameById($provinceId)
    {
        $sql = 'SELECT areaname FROM area WHERE id ='.$provinceId;
        $query = mysql_query($sql, $this->write_db);
        $info = mysql_fetch_row($query);
        if(!empty($info))
        {
            return $info;
        }
        else
        {
            return false;
        }
    }

    /**
     * 從百度地圖api以curl獲取經緯度
     * 數組形式返回
     */
    public function curlGetWeb($area,$address)
    {
        $Url="http://api.map.baidu.com/geocoder?address=".trim($area).trim($address)."&output=json&key=96980ac7cf166499cbbcc946687fb414";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $Url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把這行注釋掉的話,就會直接輸出
        $result=curl_exec($ch);
        curl_close($ch);
        $infolist=json_decode($result);
        $array=array();
        if(isset($infolist->result->location) && !empty($infolist->result->location)){
            $array=array(
                'lng'=>$infolist->result->location->lng,
                'lat'=>$infolist->result->location->lat,
            );
            return $array;
        }
        else
        {
            return false;
        }
    }
}

$start_date = date('Y-m-d H:i:s');
$start = microtime(true);
$db = new Importkindgarten();
$i = $db->roundKgList();
$end = microtime(true);
echo '重置經緯度:'.$start_date.'----用時--'.($end-$start).'----共更新('.$i.')條';
?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM