从MySQL中的SubQuery中获取查询

时间:2011-08-05 04:22:49

标签: php mysql sql database select

我的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和TimeStamp。它不起作用。我该如何格式化?

我只想从tablebusiness

获取ID和TimeStamp

任何人都可以帮我解决这个问题吗?

不是很大但我只是想学习。

这是我用来生成此查询的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.")";

1 个答案:

答案 0 :(得分:2)

为什么不添加(pow(-6 - Latitude,2)+ pow(106 - Longitude,2)* cos(-6 * 0.017453292519943)* cos({{ 1}} * 0.017453292519943))按顺序子句不需要使用子查询。请尝试以下方法:

Latitude