2015-06-05 2 views
1

У меня есть таблица результатов, выглядит следующим образом (есть только один результат на данный момент): enter image description hereUnknown Колонка Haversine запрос с колонной, созданной в Query работает

Вот мой запрос, который производит этот результат:

SELECT DISTINCT 
ID, post_author, post_title, post_type, post_status, 
max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN 
escort_details.meta_value END) AS longitude, 
max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN 
escort_details.meta_value END) AS latitude 
FROM wp_posts as escorts 
INNER JOIN wp_postmeta as escort_details 
WHERE escorts.post_type = 'escorts' 
AND escorts.post_status = 'publish' 

Я создаю столбцы долготы и широты, поскольку запрос выполняется, но я хочу искать эти столбцы и возвращать расстояние с другой частью моего запроса, являющейся частью haversine.

Так что мой полный запрос теперь выглядит следующим образом:

SELECT DISTINCT 
ID, post_author, post_title, post_type, post_status, 
max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN 
escort_details.meta_value END) AS longitude, 
max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN 
escort_details.meta_value END) AS latitude, 
(3959 * acos(cos(radians("121.184006")) * cos(radians(latitude)) 
* cos(radians(longitude) - radians("14.817371")) 
+ sin(radians("121.184006")) * sin(radians(latitude)))) AS distance 
FROM wp_posts as escorts 
INNER JOIN wp_postmeta as escort_details 
WHERE escorts.post_type = 'escorts' 
AND escorts.post_status = 'publish' 

Ошибка я получаю обратно «Неизвестный столбец„долгота“в„списке поля“», который будет иметь смысл, как есть на самом деле не longitude в базе данных, поскольку она сортируется по мере запуска запроса.

Мне интересно, знает ли кто-нибудь, как бороться с этим?

Как всегда, любая помощь оценивается.

Спасибо, Codarz360

ответ

1

Вы не можете использовать псевдоним делать различные вычисления. Один из способов - написать внешний запрос, чтобы получить список полей, а затем выполнить расчет

select 
distinct 
ID, post_author, post_title, post_type, post_status,longitude,latitude, 
(3959 * acos(cos(radians("121.184006")) * cos(radians(longitude)) 
* cos(radians(latitude) - radians("14.817371")) 
+ sin(radians("121.184006")) * sin(radians(longitude)))) AS distance 
from (
SELECT 
ID, post_author, post_title, post_type, post_status, 
max(CASE WHEN escort_details.`meta_key` = 'longitude' THEN 
escort_details.meta_value END) AS longitude, 
max(CASE WHEN escort_details.`meta_key` = 'latitude' THEN 
escort_details.meta_value END) AS latitude 
FROM wp_posts as escorts 
INNER JOIN wp_postmeta as escort_details 
WHERE escorts.post_type = 'escorts' 
AND escorts.post_status = 'publish' 
)x 
+0

Благодарим за отзыв. Теперь я получаю сообщение об ошибке «FUNCTION theescorts.latitude не существует» мне нужно добавить функцию в базу данных или что-то еще? – Codarz360

+0

Проверка у вас есть запятая после 'широты ', во внешнем select, у меня была опечатка, которую я исправил. –

+0

Удивительный человек благодарит за вашу помощь, которая, похоже, работает, и я постараюсь вам ответить правильно. Кажется, я получаю только один результат, хотя я знаю, что у меня есть несколько записей в базе данных, и вы не знаете, почему это так? Еще раз спасибо большое! – Codarz360

Смежные вопросы