У меня и моего делового партнера возникают проблемы с выбором из представления MySQL, в котором есть предложение HAVING.
Запрос просто выбирает несколько полей из представления, динамически определяет расстояние с помощью нескольких вычислений и присваивает ему псевдоним «расстояние», а затем ограничивает результаты теми строками, расстояние между которыми меньше заданной переменной.
Расстояние рассчитывается по формуле Haversine, на которую ссылаются Карты Google: https://developers.google.com/maps/articles/phpsqlsearch
Вот что я знаю:
1) Когда предложение HAVING удаляется из запроса, он успешно возвращает все результаты в представлении, включая вычисленное «расстояние» для каждой строки
2) Когда в запрос добавляется предложение HAVING, он возвращает пустой набор результатов.
3) Мы также попытались заменить переменную в предложении HAVING на статическое число — это также вернуло пустой набор результатов.
Содержимое представления кажется неуместным, так как все работает без предложения HAVING.
Вот запрос:
SELECT
restaurantName,
restaurantID,
locationID,
locationCity,
locationState,
locationAddress,
locationLatitude,
locationLongitude,
( 3959 * acos( cos( radians('%s') ) * cos( radians( locationLatitude ) ) * cos( radians( locationLongitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( locationLatitude ) ) ) ) AS distance
FROM newView
HAVING distance < '%s'
ORDER BY distance
Помните, что представление идеально вычисляет «расстояние» для каждой выбранной строки без предложения HAVING, поэтому мы убеждены, что проблема кроется в нем... когда мы убираем его, все работает, но возвращается каждая строка в представлении.
Есть идеи, почему предложение HAVING возвращает пустой набор? Является ли предложение HAVING несовместимым с представлениями?