2017-01-25 4 views
0

Обновлены:Как конвертировать этот запрос в производной концепции таблицы

Как ввести это ниже запроса в производных таблиц

(3959 * ACOS (Cos (радианы (36.247137)) * Cos (радианов (. cmlat)) * Cos (радиан (cmlng) -. радиан (-115,221032)) + sin (радиан (36.247137)) * Sin (радиан (cmlat)))) как расстояние

в этом MySql. запрос:

MySql запросов:

SELECT (3959 * acos(cos(radians(36.247137)) * cos(radians(`cm`.`lat`)) * cos(radians(`cm`.`lng`) - radians(-115.221032)) + sin(radians(36.247137)) * sin(radians(`cm`.`lat`)))) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure 

................................... .......................................

Заголовок предыдущего заголовка: Почему нет результата при применении MAX, MIN формула цены в MySql запрос

Детальный вопрос:

http://pastebin.com/UR48mbtq ее e - мой запрос mysql. Я хочу получить максимальную и минимальную цену домов, которые падают до расстояния в 20 миль .. но результат равен нулю. Расстояние в примере 20, но я также привести в моей базе данных с 20 миль и менее 20 миль

MySql Запрос:

SELECT (3959 * acos(cos(radians(36.247137)) * cos(radians(`cm`.`lat`)) * cos(radians(`cm`.`lng`) - radians(-115.221032)) + sin(radians(36.247137)) * sin(radians(`cm`.`lat`)))) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure 

С помощью этого результата:

distance    minPrice maxPrice minSquare maxsquare 
1754.3401139613718  0  21000003  0   8607 

Но когда я добавляю Имея положение, то результат будет нулевым с ниже запроса

SELECT (3959 * acos(cos(radians(36.247137)) * cos(radians(`cm`.`lat`)) * cos(radians(`cm`.`lng`) - radians(-115.221032)) + sin(radians(36.247137)) * sin(radians(`cm`.`lat`)))) AS distance, (pl.price_pure) as minPrice, (pl.price_pure) as maxPrice, (pl.`squarefeet_pure`) as minSquare, (pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure 

Update : , если я удаляю max, min формулу из запроса, а затем его даю мне результат 400.

+0

вместо того, чтобы иметь возможность попробовать где? –

+0

@krishnpatel его виртуальное поле и я вещь, где can not применять здесь. также я пробовал раньше. –

+0

CAST (дистанционное входное имя AS UNSIGNED) AS расстояние. вы можете попробовать? –

ответ

1

Having - это предложение, которое применяется после создания строк запроса. Поскольку у вас есть агрегированные функции в вашем запросе, но нет GROUP BY, mysql предоставляет вам один (образец) distance результат, а затем минимальный и максимальный для всего набора данных.

После этого применяется пункт having - и, как указывал @krishnpatel, 1754 < 20 является ложным, так что строка отбрасывается, и вы не получаете ничего.

Добавить GROUP BY в свой выбор, что соответствует вашему расчету distance, чтобы вернуть искомый результат.

0

Сначала наберите идентификаторы недвижимости за 20 миль.

Затем использовать это в качестве подзапроса и JOIN к главному столу, чтобы сделать все остальное:

SELECT MIN(...), ... 
    FROM (SELECT id FROM tbl WHERE ... < 20) AS x 
    JOIN tbl ON x.id = tbl.id; 

Нет HAVING, нет GROUP BY (если я не пропустил что-то).

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