用于根据记录和条件的计数查找第一个可用选项的功能

时间:2015-01-13 21:26:13

标签: mysql

我需要编写一个SQL语句来获得第一个免费的#39;我的团队的poule(游泳池/团队集合)。让我们解释一下。 我有两张桌子,一张桌子用4个poules,每个桌子的TEAMQTY为4(允许的最大团队数量为poule):

ID  TOURNID     NAME       TEAMQTY
1        1      Poule 1         4
2        1      Poule 2         4
3        1      Poule 3         4
4        1      Poule 4         4

和表团队

ID  TOURNID     NAME    POULEID
1   1           Team 1        1
2   1           Team 2        1
3   1           Team 3        1
4   1           Team 4        1

我想在mysql中编写一个函数,根据上面的情况建议pouleid为2,因为poule 1完全被团队填满。我应该能够在PouleId 2中再插入4个团队,之后我的函数应该返回PouleID 3作为建议。

我是mysql(一个sql noob)的新手,我已经尝试过:

SELECT id FROM POULES WHERE TOURNID = 1 AND 
teamqty > (SELECT COUNT(ID) FROM TEAMS WHERE TOURNID = 1) LIMIT 1

毋庸置疑我的实验sql代码是没用的.. 我在这里需要一个while循环还是一个SQL语句呢?

这是我的支持代码:

CREATE TABLE IF NOT EXISTS `poules` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `TOURNID` int(11) NOT NULL,
  `NAME` varchar(20) NOT NULL,
  `TEAMQTY` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
 KEY `TOURNID` (`TOURNID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


INSERT INTO `poules` (`ID`, `TOURNID`, `NAME`, `TEAMQTY`) VALUES
(1, 1, '1',  4),
(2, 1, '2',  4),
(3, 1, '3',  4),
(4, 1, '4',  4);


CREATE TABLE IF NOT EXISTS `teams` (
 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `TOURNID` int(11) NOT NULL,
 `NAME` varchar(50) NOT NULL,
 `POULEID` int(11) DEFAULT NULL,
 PRIMARY KEY (`ID`),
 UNIQUE KEY `NAME` (`NAME`),
 KEY `TOURNID` (`TOURNID`))
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;



INSERT INTO `teams` (`ID`, `TOURNID`, `NAME`, `POULEID`) VALUES
(1, 1, '1', 1),
(2, 1, '2', 1),
(3, 1, '3', 1),
(4, 1, '4', 1);

TIA Mike

1 个答案:

答案 0 :(得分:2)

您可以left join使用获得total team count的子查询并与主表中的团队计数进行比较

你可以使用限制来获得基于团队数量的订单的一个结果。

select p.id as pouleid, ifnull(t.teamcount,0), p.tournid
from poules p
left join ( select count(pouleid) as teamcount, pouleid, tournid
            from teams
            group by pouleid, tournid
)t
on p.id = t.pouleid
and p.tournid = t.tournid
where ifnull(t.teamcount,0) < p.teamqty