我正在尝试为餐厅预订系统汇总一个查询。这样做的想法是,如果没有足够大的桌子来容纳派对规模,则可以浏览其他空闲桌子,找到两个足够大的桌子,可以放在一起以容纳派对规模。
理想情况下,我希望能够选择最少的桌子以与聚会的规模尽可能地匹配。
例如,如果有一个要求有十二个表的请求,那么我想理想地找到六个表中的两个,不要再多了。
这是我尝试过的查询,但给出的结果为空
select tbl_id, sum(max_seats) as sumseats from tbl_list
group by tbl_id having sumseats> 11
我已经链接到sql小提琴以显示表结构
http://sqlfiddle.com/#!2/5a6904/2/0
最佳答案
尝试以下类似的方法(除了MySQL外,您还需要类似PHP的方法):
检查一张桌子是否可以容纳所需人数。如果是,请按容量升序打印所有此类表格。
如果没有单个表的容量大于或等于所需容量,请保留容量最大的表,并从所需容量中减去容量。
转到步骤1。
代码:
$bookedTables = array();
while ($requiredCapacity > 0) {
$query = "SELECT * FROM (SELECT tbl_id, max_seats FROM tbl_list WHERE max_seats > $requiredCapacity)table1 ORDER BY table1.max_seats ASC";
$result = mysql_query($query);
if (count($result)!=0) {
array_push($bookedTables, $result[0]['tbl_id'];
$requiredCapacity = $requiredCapacity - $result[0]['max_seats'];
}
else {
$query = "SELECT * FROM (SELECT tbl_id, max_seats FROM tbl_list)table1 ORDER BY table1.max_seats DESC";
if (count($result)!=0) {
array_push($bookedTables, $result[0]['tbl_id'];
$requiredCapacity = $requiredCapacity - $result[0]['max_seats'];
}
else {
echo "No more tables left";
break;
}
}
}
关于php - 选择总和大于一定数量的最小数量的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21751612/