2011-08-05 30 views
1

我有一個MySQL查詢的問題。從MySQL中的子查詢抓取查詢

我寫的SQL查詢來獲取從tablebusiness ID和時間戳與不同的查詢

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 

現在能正常工作在我的情況。

但是我不想在最終結果中提到DistanceSquare以節省帶寬。所以我做

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) 

所以基本上我從內SELECT生成的表拿起ID和時間戳。它不起作用。我應該如何格式化它?

我只想從tablebusiness

獲得ID和時間戳任何一個可以幫我解決這個問題呢?

不是一個大的,但我只是想學習。

這是PHP代碼我用來生成這個查詢

$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

爲什麼不你剛剛增加(POW(-6- Latitude,2)+ POW(106- Longitude,2)* COS (-6 * 0.017453292519943)* cos(Latitude * 0.017453292519943))按子句排序不需要使用子查詢。請嘗試以下操作:

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

Ah效果不錯。工作得很好。其實我一直在想用存儲過程來做這件事,但似乎有幾種方法可以做到這一點。 –