2011-08-05 1 views
1

У меня проблема с запросом mysql.Grabbing Query from SubQuery в MySQL

Я пишу SQL запрос, чтобы получить идентификатор и Timestamp из tablebusiness с другим запросом

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) 

Так что я собираю ID и TimeStamp из таблицы, созданной внутренним SELECT. Это не работает. Как мне отформатировать его?

Я только хочу, чтобы получить идентификатор и TimeStamp от tablebusiness

может ли один помочь мне решить эту проблему?

Не большой, но я просто хочу учиться.

Это код 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

Почему не у просто добавить (пау (-6- Latitude, 2) + Pow (106- Longitude, 2) * соз (-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 работает хорошо. Работает очень хорошо. На самом деле я думал об этом с хранимой процедурой, но, похоже, есть несколько способов сделать это. –