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