Как вывести запросом из БД минимальное и максимальное значение?

Здраствуйте, не могу понять, объясните пожалуйста

Есть запрос к БД MySQL, через PDO:

$cmd = $this->pdo->query("SELECT id, title, category, date_added, city, in_top, language, type, building_condition, rooms, bathrooms,
MIN(price) as min($min_price), photo, photo_2, photo_3, photo_4 
FROM $database_lang WHERE city = $city and in_top = $in_top 
ORDER BY id $new LIMIT $entry_start, ".LIMIT_ENTRY."");

Но не могу вывести минимальную и максимальную цену (price) То есть, в поиске ставится значение, к примеру 50000 и чтобы вывелись все записи квартир у которых цена не меньше 50000

Как это реализовать?


Ответы (2 шт):

Автор решения: Aziz Umarov

Напишу чтоб было читабельнее сам запрос а вы поставите как надо. Если я правильно понял и вам нужны сами квартиры то нужно использовать оконные функции. Так как вам нужны только min и мах то можно сделать так.

SELECT 
     id, 
     title, 
     category, 
     date_added, 
     city, 
     in_top, 
     language, 
     type, 
     building_condition, 
     rooms, 
     bathrooms, 
     price, 
     photo, 
     photo_2, 
     photo_3, 
     photo_4 
FROM 
     $database_lang 
WHERE 
     city = $city 
     and price >= 50000
ORDER BY price desc
LIMIT 1
UNION ALL
SELECT 
     id, 
     title, 
     category, 
     date_added, 
     city, 
     in_top, 
     language, 
     type, 
     building_condition, 
     rooms, 
     bathrooms, 
     price, 
     photo, 
     photo_2, 
     photo_3, 
     photo_4 
FROM 
     $database_lang 
WHERE 
     city = $city 
     and price >= 50000
ORDER BY price
LIMIT 1

Можно сделать одним запросом без union тогда нужно будет отбросить данные о квартирах и оставить только цену потому что агрегирование работает с однородными данными.

→ Ссылка
Автор решения: Ипатьев

Вопрос в целом путанный и противоречащий сам себе, но если отвечать буквально, то надо запросить минимальное и максимальное значение цены

$sql = "SELECT min(price), max(price) FROM database_lang WHERE price > ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([$price]);
list($min, $max) = $stmt->fetch(PDO::FETCH_ROW);

По желанию можно добавить в запрос другие условия

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

→ Ссылка