2014-02-13 40 views
0

我正在尝试为一家餐馆预订系统进行查询。这个想法是,如果没有足够大的桌子来参加派对,那么通过其他免费桌子来查找并找到两个足够大的桌子来容纳派对的大小。选择总和大于某个数字的最小数量记录

理想情况下,我希望能够选择最少的表格以与派对的尺寸紧密匹配。

例如,如果有一个十二桌的请求,我想理想地找到六个表中的两个表,但没有更多。

这是我试过的查询,但它提供了一个空的结果

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

+0

你应该给你的表结构的详细信息 –

+0

最好在http://sqlfiddle.com – fancyPants

+0

你不能通过tbl_id进行分组,因为它只会给你那些容量高于你需要的n红棕色。 –

回答

1

试着这么做以下内容(除了MySQL,您还需要PHP之类的东西):

  1. 检查一张桌子是否可以容纳所需人数。如果是,则按照容量的升序打印所有这些表格。
  2. 如果没有单个表的容量大于或等于所需容量,请保留容量最大的表并从所需容量中扣除容量。
  3. 转到步骤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; 
     } 
    } 
} 
0

我不建议这是一个明确的答案,但它的一些思考......

SELECT * FROM tables; 
+----+------+ 
| id | size | 
+----+------+ 
| 1 | 2 | 
| 2 | 2 | 
| 3 | 2 | 
| 4 | 2 | 
| 5 | 4 | 
| 6 | 4 | 
| 7 | 4 | 
| 8 | 6 | 
| 9 | 6 | 
| 10 | 8 | 
+----+------+ 

SELECT * 
    , x.size + y.size + z.size pax 
    FROM tables x 
    LEFT 
    JOIN (SELECT * FROM tables UNION SELECT 0,0) y 
    ON y.size < x.size OR (y.size = x.size AND y.id < x.id) 
    LEFT 
    JOIN (SELECT * FROM tables UNION SELECT -1,0) z 
    ON z.size < y.size OR (z.size = y.size AND z.id < y.id) 
HAVING pax >= 12 
ORDER 
    BY pax 
    , x.size DESC 
    , y.size DESC 
    , z.size DESC 
LIMIT 1; 
+----+------+------+------+------+------+------+ 
| id | size | id | size | id | size | pax | 
+----+------+------+------+------+------+------+ 
| 10 | 8 | 7 | 4 | -1 | 0 | 12 | 
+----+------+------+------+------+------+------+ 
+0

编辑成更可信的东西 – Strawberry

相关问题