Php MySQL-从一个房间到另一个公寓的多对一:如何在不遍历所有房间的情况下为一个公寓获得价格最低的房间?

Php MySQL-从一个房间到另一个公寓的多对一:如何在不遍历所有房间的情况下为一个公寓获得价格最低的房间?,php,mysql,database,Php,Mysql,Database,这些是我的模型、房间和公寓 我的问题是,如果我不想得到一套公寓的最低价格的房间,我是否一定要先得到所有的房间,反复浏览,然后确定最低价格的房间 如果我输入/编辑/删除公寓的新房间,是否可以将FK从公寓添加到房间,该房间将自动更改为最低价房间 MySQL是否提供了一些机制来解决这个问题 提前谢谢 SELECT * FROM rooms WHERE apartment = "apartment1" ORDERED BY price DESC 最便宜的房间将是首选。添加房间和相应公寓之间的反向关系

这些是我的模型、房间和公寓

我的问题是,如果我不想得到一套公寓的最低价格的房间,我是否一定要先得到所有的房间,反复浏览,然后确定最低价格的房间

如果我输入/编辑/删除公寓的新房间,是否可以将FK从公寓添加到房间,该房间将自动更改为最低价房间

MySQL是否提供了一些机制来解决这个问题

提前谢谢

SELECT * FROM rooms WHERE apartment = "apartment1" ORDERED BY price DESC
最便宜的房间将是首选。添加房间和相应公寓之间的反向关系


最便宜的房间将是首选。在房间和相应公寓之间添加反向关系

这应该可以做到:

SELECT
  rooms.price,
  apartments.id
FROM rooms
JOIN apartments
WHERE rooms.apartment_id = apartments.id
ORDER BY rooms.price ASC
LIMIT 1

向选择列表中添加您需要的任何内容,如果这是您所需要的全部内容,那么信息当然已经在rooms表中,因此无需加入。

这应该可以做到:

SELECT
  rooms.price,
  apartments.id
FROM rooms
JOIN apartments
WHERE rooms.apartment_id = apartments.id
ORDER BY rooms.price ASC
LIMIT 1

将您需要的任何内容添加到选择列表中,如果这是您所需要的,信息当然已经在rooms表中,因此无需加入。

由于您没有包括两个表的结构,我将假定您的表采用以下基本格式:

公寓(公寓ID,名称…) 房间(房间号、公寓号、价格…)


这会给你提供那套公寓里最便宜的房间。您需要遍历所有公寓,以获得与之相关联的最便宜的房间(取决于您如何显示它们),并且遍历公寓的查询强度远远低于按房间进行的查询强度,因为您没有包含两个表的结构,我将假定您有以下基本格式:

SELECT apartment.ID, 
    MIN(room.Price) 
FROM room 
    JOIN apartment ON room.apartmentID=apartment.ID 
GROUP BY apartment.ID;
公寓(公寓ID,名称…) 房间(房间号、公寓号、价格…)

这会给你提供那套公寓里最便宜的房间。您需要遍历所有公寓,以获得与之相关联的最便宜的房间(取决于您如何显示它们),并且遍历公寓的查询强度远远低于按房间进行的查询强度

SELECT apartment.ID, 
    MIN(room.Price) 
FROM room 
    JOIN apartment ON room.apartmentID=apartment.ID 
GROUP BY apartment.ID;
我很明显在猜测你的亲戚

我很明显在猜测你的亲戚

如果我输入/编辑/删除公寓的新房间,是否可以将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....
找到每个公寓的哪个房间是最便宜的有点牵连——考虑一下你有几个房间,每个房间的价格都一样(最低)。你需要用这个

如果我输入/编辑/删除公寓的新房间,是否可以将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....

找到每个公寓的哪个房间是最便宜的有点牵连——考虑一下你有几个房间,每个房间的价格都一样(最低)。您需要使用。

这将导致在按价格订购时对所有房间(无论它们属于哪个公寓)进行核算“按流程订购”将首先返回最昂贵的房间。这将导致在按价格订购时对所有房间(无论它们属于哪个公寓)进行核算“ORDERED BY proce DESC”将首先返回最昂贵的房间。MIN()您能否提供有关查询和/或DB表字段的更多信息MIN()您能否提供有关查询和/或DB表字段的更多信息