我正在研究房间预订系统,系统假设在将用户分配到房间之前检查房间是否已满。 我想通过高效的mysql查询随机地将用户预订到一个房间。
我有两张桌子
Rooms Details
rID | Room Number | No of persons |
1 | Room23 | 2 |
2 | Room24 | 1 |
Allocated Users
rID* | user Name |
1 | manueis |
如何检查room23
是否留给某人,然后将下一位用户设置为房间。
答案 0 :(得分:0)
这实际上取决于您希望返回结果集的样子。
要获得房间以及“已分配用户”的数量,您可以运行这样的查询。
HAVING r.no_of_persons > COUNT(p.rid)
如果要排除已经具有不小于房间“no_of_persons”数量的“allocated_user”的行,您可以添加一个HAVING子句......
ORDER BY
对于该结果的排序,您可以添加ORDER
BY r.no_of_persons - COUNT(p.rid) ASC
, r.no_of_persons DESC
子句。首先获得“最充分”的房间,最大的“no_of_persons”
RAND()
或者,正如您的问题所示,如果您希望以伪随机方式排序这些行,您可以(低效)使用ORDER
BY RAND()
函数......
LIMIT 1
(这可能效率低下,因为必须为返回的每一行计算RAND()函数,然后所有行都必须按该函数返回的值进行排序。
如果您只想返回一行,可以添加LIMIT子句......
{{1}}