1

問題を説明します。私は2つのテーブルを持っています.「リスト」には、異なる情報を持つすべてのリストと、特に都市IDが含まれています. 緯度、経度、都市名など、多くの情報を含む私の国のすべての都市の完全なリストを含む2番目のテーブル「都市」があります。

実際のポイント (ジオローカライズされた、緯度/経度があります) とリスト テーブルの都市との間の距離で並べ替えられたすべてのリストを表示したいと考えています。

実際、私は 2 つの MySQL クエリでこれを行います。

$formula = "(6366*acos(cos(radians($latitude))*cos(radians(`latitude`))*cos(radians(`longitude`) -radians($longitude))+sin(radians($latitude))*sin(radians(`latitude`))))";

        $q = "SELECT *,$formula AS dist FROM ".$this->db_city." WHERE $formula<='$distance' ORDER by dist ASC";
        $q = $this->db->query($q);
$resultSQL = $q->result_array();

そしてこれ:

if ($localization != ''){
            if ($whereClause == ''){
                //$whereClause .= ' WHERE address_city LIKE "'.$localization.'"';
                $loc = '';
                foreach ($localization as $key => $value) {
                    if ($loc == ''){
                        $loc .= '"'.$value.'"';
                    }else{
                        $loc .= ', "'.$value.'"';
                    }
                }
                $whereClause .= ' WHERE address_city IN ('.$loc.')';
            }else{
                //$whereClause .= ' && address_city LIKE "'.$localization.'"';
                $loc = '';
                foreach ($localization as $key => $value) {
                    if ($loc == ''){
                        $loc .= '"'.$value.'"';
                    }else{
                        $loc .= ', "'.$value.'"';
                    }
                }
                $whereClause .= ' && address_city IN ('.$loc.')';
            }
        }

        $q = "SELECT * FROM ".$this->db_listing.$whereClause." ORDER BY created_stamp DESC";

うまくいきましたが、問題は、この 2 番目のクエリで「dist」パラメーターにアクセスできないことです。そのため、dist で注文できません。その解決策は、最初の大きなクエリ (数式を含むクエリ) を 2 番目のクエリとマージすることです。

LEFT JOIN で試してみましたが、うまくいきませんでした。私を助けてくれませんか?ありがとう !

4

1 に答える 1

0

これを試してみてください。指定された経度と緯度から $distance の半径内にあるすべての都市が返されます。

"SELECT *,(((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS distance FROM location WHERE (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) <= $distance"

ありがとう。

于 2013-04-06T08:48:30.860 に答える