2011-08-05 5 views
1

mysqlクエリに問題があります。MySQLでSubQueryからクエリを取得する

は、私は別のクエリ

SELECT `ID`,`TimeStamp`,pow(-6-`Latitude`,2)+pow(106-`Longitude`,2)*cos(-6*0.017453292519943)*cos(`Latitude`*0.017453292519943) as DistanceSquare FROM `tablebusiness` WHERE Title LIKE '%sushi%' AND -6.8996746410157 < `Latitude` AND `Latitude` < -5.1003253589843 AND 105.10032535898 < `Longitude` AND `Longitude` < 106.89967464102 ORDER BY DistanceSquare LIMIT 2 ,20 

でtablebusinessからIDとタイムスタンプを取得するために、SQLクエリを書いていますさて、これは私の場合には正常に動作します。

しかし、私は帯域幅を節約するために最終結果にDistanceSquareを言及したくありません。だから私は、そこで、基本的私は内側のSELECTで生成されたテーブルからIDとタイムスタンプを拾っています

SELECT `ID`,`TimeStamp` FROM (SELECT `ID`,`TimeStamp`,pow(-6-`Latitude`,2)+pow(106-`Longitude`,2)*cos(-6*0.017453292519943)*cos(`Latitude`*0.017453292519943) as DistanceSquare FROM `tablebusiness` WHERE Title LIKE '%sushi%' AND -6.8996746410157 < `Latitude` AND `Latitude` < -5.1003253589843 AND 105.10032535898 < `Longitude` AND `Longitude` < 106.89967464102 ORDER BY DistanceSquare LIMIT 2 ,20) 

を行います。それは動作しません。どのようにフォーマットする必要がありますか?

いずれかがこの問題を解決するために私を助けることができる私はtablebusiness

からIDとタイムスタンプを取得したいですか?

大きなものではありませんが、私はただ学びたいだけです。

これは私がuはちょうど(POW(-6- Latitudeを追加しないのはなぜこのクエリ

$phiper180=pi()/180; 
$formula="pow(".$_GET['lat']."-`Latitude`,2)+pow(".$_GET['long']."-`Longitude`,2)*cos(".$_GET['lat']."*".$phiper180.")*cos(`Latitude`*".$phiper180.")"; 

$query="SELECT `ID`,`TimeStamp`,$formula as DistanceSquare FROM `tablebusiness` WHERE Title LIKE '%".$_GET['keyword']."%' AND ". ($_GET['lat']-$distanceindegrees). " < `Latitude` AND `Latitude` < " . ($_GET['lat']+$distanceindegrees) . " AND " . ($_GET['long']-$distanceindegrees). " < `Longitude` AND `Longitude` < " . ($_GET['long']+$distanceindegrees)." ORDER BY DistanceSquare LIMIT ".($startFrom)." ,20"; 
$query="SELECT `ID`,`TimeStamp` FROM (".$query.")"; 

答えて

2

を生成するために使用されるPHPコード、2)+ POW(106- Longitude、2)* COSです(-6 * 0.017453292519943)* cos(Latitude * 0.017453292519943))by節では、サブクエリを使用する必要はありません。以下を試してください:

SELECT `ID`,`TimeStamp` FROM `tablebusiness` WHERE Title LIKE '%sushi%' AND -6.8996746410157 < `Latitude` AND `Latitude` < -5.1003253589843 AND 105.10032535898 < `Longitude` AND `Longitude` < 106.89967464102 ORDER BY (pow(-6-`Latitude`,2)+pow(106-`Longitude`,2)*cos(-6*0.017453292519943)*cos(`Latitude`*0.017453292519943)) LIMIT 2 ,20 
+0

ああ、うまくいきます。非常にうまく動作します。実際に私はストアドプロシージャでこれを行うことを考えてきましたが、いくつかの方法がありそうです。 –

関連する問題