Mysql ошибка запроса 1064

Я пытаюсь использовать запрос о поиске пользователей с этим запросом:

                Select id, username, lat, long,
                    acos(sin(0.761312289853)*sin(radians(lat)) + cos(0.761312289853)*cos(radians(lat))*cos(radians(long)-0.0676354285243)) * 6371 As D
                From (
                    Select id, username, lat, long,
                    From rcp_users
                    Where lat Between 43.4491099949 And 43.7908522051
                      And long Between 3.63919239657 And 4.11125680343
                ) As FirstCut
                Where acos(sin(0.761312289853)*sin(radians(lat)) + cos(0.761312289853)*cos(radians(lat))*cos(radians(long)-0.0676354285243)) * 6371 < 30
                Order by D

но у меня есть эта ошибка:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long,
                    acos(sin(0.761312289853)*sin(radians(lat)) + cos(0.761312289853)*' at line 1

Я не понимаю ошибку..

2 ответа

Решение

long является зарезервированным ключевым словом. Если вы собираетесь назвать идентификатор столбца, который вы должны заключить в галочки:

Select id, username, lat, `long`,
    acos(sin(0.761312289853)*sin(radians(lat)) + cos(0.761312289853)*cos(radians(lat))*cos(radians(`long`)-0.0676354285243)) * 6371 As D
From (
    Select id, username, lat, `long`,
    From rcp_users
    Where lat Between 43.4491099949 And 43.7908522051
      And `long` Between 3.63919239657 And 4.11125680343
) As FirstCut
Where acos(sin(0.761312289853)*sin(radians(lat)) + cos(0.761312289853)*cos(radians(lat))*cos(radians(`long`)-0.0676354285243)) * 6371 < 19
Order by D

long является зарезервированным ключевым словом, вы не можете использовать его, потому что оно имеет другое значение в mysql.

Вы можете использовать его с помощью обратных галочек (например, одинарные кавычки в php делают вещи буквальными):

SELECT id, username, lat, `long` FROM table

Чтобы сделать это немного более очевидным, скажем, у вас есть столбец в вашей базе данных с именем select:

SELECT id,username,select FROM table // this will not work, select is reserved
Другие вопросы по тегам