#php #mysql #database
#php #mysql #База данных
Вопрос:
Это мои модели, комната и квартира.
Мой вопрос в том, если я не хочу получать комнату с самой низкой ценой для квартиры, обязательно ли мне сначала получить все комнаты, перебрать их и определить комнату с самой низкой ценой?
Возможно ли, возможно ли добавить FK из квартиры в комнату, которая автоматически изменится на комнату с самой низкой ценой, если я введу / отредактирую / удалю новые комнаты для квартиры?
Предоставляет ли MySQL какие-либо механизмы для решения этой проблемы?
Заранее спасибо.
Комментарии:
1. dev.mysql.com/doc/refman/5.0/en/… MIN () Не могли бы вы предоставить дополнительную информацию о запросе и / или полях таблицы DB
Ответ №1:
SELECT apartment.ID,
MIN(room.Price)
FROM room
JOIN apartment ON room.apartmentID=apartment.ID
GROUP BY apartment.ID;
Я, очевидно, догадываюсь о ваших отношениях.
Ответ №2:
Поскольку вы не указали структуру ваших двух таблиц, я буду исходить из предположения, что они у вас есть в следующем базовом формате:
Квартира (ApartmentID, Name …) Номер (roomId, ApartmentID, Цена …)
select RoomID from Room where ApartmentID = x order by price desc limit 1
Это должно дать вам самую дешевую комнату в этой конкретной квартире. Вам нужно было бы перебрать все квартиры, чтобы получить самую дешевую комнату, связанную с ними (в зависимости от того, как вы их отображаете), и перебор по квартире был бы гораздо менее трудоемким, чем выполнение этого по комнатам
Ответ №3:
SELECT * FROM rooms WHERE apartment = "apartment1" ORDERED BY price DESC
Самая дешевая комната будет первым элементом выбора. Добавьте обратное соотношение между комнатами и соответствующей квартирой
Комментарии:
1. В результате ВСЕ комнаты, независимо от того, к какой квартире они принадлежат, будут учитываться при заказе по цене
2. «ЗАКАЗАНО МЕТОДОМ описания» сначала вернет самую дорогую комнату.
Ответ №4:
Это должно сработать:
SELECT
rooms.price,
apartments.id
FROM rooms
JOIN apartments
WHERE rooms.apartment_id = apartments.id
ORDER BY rooms.price ASC
LIMIT 1
Добавьте в список ВЫБОРА все, что вам нужно, если это все, что вам нужно, информация, конечно, уже есть в таблице rooms, поэтому не было бы необходимости ПРИСОЕДИНЯТЬСЯ.
Ответ №5:
Возможно ли, возможно ли добавить FK из квартиры в комнату, которая автоматически изменится на комнату с самой низкой ценой, если я введу / отредактирую / удалю новые комнаты для квартиры?
Нет, внешние ключи предназначены не для этого.
Использование FK может быть простительным, если у вас был сценарий, в котором было очень дорого определить, на какую из сторон «многих» следует ссылаться (например, у вас миллионы комнат в каждой квартире) или где критерии для выбора одной связанной записи основывались на данных, а не на данных, сохраненных для «многих».
Но в вашем случае это просто…
SELECT room.id
FROM room
WHERE room.apartment=?
ORDER BY room.price ASC
LIMIT 0,1
(где? обозначает идентификатор для выбора квартиры).
Или, если вы хотите самую дешевую цену во всех квартирах, что-то вроде….
SELECT apartment.name, apartment.id...., MIN(room.price)
FROM room INNER JOIN apartment
ON (room.apt_id=apartment.id)
GROUP BY apartment.name, apartment.id....
Найти, какая комната в каждой квартире самая дешевая, немного сложнее — рассмотрим сценарий, в котором у вас есть несколько комнат, каждая по одинаковой (самой низкой) цене. Вам нужно будет использовать трюк с максимальным объединением.