Синтаксическая ошибка MySQL в формуле Haversine - PullRequest
0 голосов
/ 13 мая 2011

Я получаю разочаровывающую синтаксическую ошибку MySql в моем коде ниже.Фактическая ошибка:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования возле 'JOIN storetable ON pricelist.storecode = storetable.storecode JOIN itemlist ON' в строке 9 "

Дополнительная информация: Этот кодоснованный на примере Google Maps Php / MySql: http://code.google.com/apis/maps/articles/phpsqlsearch.html

Я смог заставить этот код работать нормально, прежде чем пытался добавить операторы JOIN.

$query = sprintf("SELECT storetable.storeaddress, 
                         storetable.storename, 
                         storetable.lat, 
                         storetable.lng,
                         ( 3959 * acos( cos( radians('%s') ) * 
                         cos( radians( storetable.lat ) ) *                              cos(radians(storetable.lng)  - radians('%s') ) + 
                         sin( radians('%s') ) * sin( radians( storetable.lat ) ) ) ) AS distance 
                    FROM pricelist 
                  HAVING distance < 25 
                ORDER BY distance 
                   LIMIT 0 , 20,
                    JOIN storetable ON pricelist.storecode = storetable.storecode
                    JOIN itemlist ON pricelist.upccode = itemlist.upccode",
                 mysql_real_escape_string($latitude),
                 mysql_real_escape_string($longitude),
                 mysql_real_escape_string($latitude));

1 Ответ

1 голос
/ 13 мая 2011

СОЕДИНЕНИЯ были в неправильном месте - они идут после предложения FROM, перед предложением WHERE - Использование:

$query = sprintf("SELECT storetable.storeaddress, 
                         storetable.storename, 
                         storetable.lat, 
                         storetable.lng,
                         ( 3959 * acos( cos( radians('%s') ) * 
                         cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + 
                         sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance 
                    FROM pricelist 
                    JOIN storetable ON pricelist.storecode = storetable.storecode
                    JOIN itemlist ON pricelist.upccode = itemlist.upccode
                  HAVING distance < 25 
                ORDER BY distance 
                   LIMIT 0, 20",
                 mysql_real_escape_string($latitude),
                 mysql_real_escape_string($longitude),
                 mysql_real_escape_string($latitude));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...