Использование min () в нескольких таблицах - PullRequest
0 голосов
/ 16 ноября 2011

Мои знания sql не так хороши, и после 2 часов мозгового штурма я решил спросить здесь своих друзей.

Вот моя проблема, я занимаюсь разработкой туристического сайта.Есть регионы и таблица цен.Структура в основном так.

regions             region_contents         prices
-------             ----------------        --------
regionId            regionId                priceId
regionName          hotelId                 hotelId
someMoreFields      someMoreFields          price
                                            beginDate
                                            endDate
                                            someMoreFields

Из этих данных я хочу получить

  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+
  |        hotelId  |  hotelName  |  min price for this Id  |
  +-----------------+-------------+-------------------------+

Я запрашиваю все отели в определенном регионе, упорядоченные по минимальной цене для каждого отеля и конечной дате цены для каждого отелядолжно быть позже, чем СЕЙЧАС ().

Заранее спасибо.Также извинения за плохую грамматику.

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Этот запрос должен быть тем, что вам нужно:

SELECT hotel_id, hotel_name, MIN(price)
FROM region
JOIN region_contents 
   ON regionName = <reqdname> AND region.regionID = region_contents.regionID
JOIN prices 
   ON region_contents.hotel_id = prices_hotel_id
WHERE end_date > NOW()
GROUP BY hotel_id
ORDER BY MIN(price)
0 голосов
/ 16 ноября 2011

Возможно, я что-то упускаю, но это кажется простым ...

SELECT
 hotelId,
 hotelName,
 MIN(price)
FROM
 region_contents
INNER JOIN
 prices
ON
 region_contents.hotel_id = prices.hotel_id
GROUP BY
 hotelId,
 hotelName
ORDER BY
 MIN(price)
0 голосов
/ 16 ноября 2011

Я полагаю, что вам нужны данные из всех ваших таблиц, то есть JOIN, за которым следует GROUP BY для использования функции MIN():

SELECT rc.hotelId, rc.hotelName, MIN(p.price) FROM regions r
LEFT JOIN region_contents rc ON r.regionId = rc.regionId
LEFT JOIN prices p ON p.hotelId = rc.hotelID
GROUP BY rc.hotelId

Руководство по MySQL для функций, сгруппированных по GROUP BY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...