我正在尝试为餐厅预订系统汇总一个查询。这样做的想法是,如果没有足够大的桌子来容纳派对规模,则可以浏览其他空闲桌子,找到两个足够大的桌子,可以放在一起以容纳派对规模。

理想情况下,我希望能够选择最少的桌子以与聚会的规模尽可能地匹配。

例如,如果有一个要求有十二个表的请求,那么我想理想地找到六个表中的两个,不要再多了。

这是我尝试过的查询,但给出的结果为空

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/

10-10 20:35