首页 > 解决方案 > MYSQL:根据另一个表的计数过滤掉?

问题描述

我有一个快速表格,我有一个每周活动,允许人们注册一个时间段,但是我想限制 3 人每周注册一个特定的时间段

我有 2 个表(如果算上用户/用户 ID 表,则为 3 个)

时隙:

+  id  +  slot  +  enabled  +
+------+--------+-----------+
+   1  + 12:00  +     1     +
+------+--------+-----------+
+   2  + 12:03  +     1     +
+------+--------+-----------+
+   3  + 12:06  +     1     +
+------+--------+-----------+
+   4  + 12:09  +     0     +
+------+--------+-----------+

注册:

+  userid  +  date       +  timeslotid  +
+----------+-------------+--------------+
+   133    + 2020-12-01  +     2        +
+----------+-------------+--------------+
+   167    + 2020-12-01  +     2        +
+----------+-------------+--------------+
+   356    + 2020-12-01  +     2        +
+----------+-------------+--------------+

我想查看 2020 年 12 月 1 日没有 3 人注册的所有已启用时间段 ID 和可用时间段的列表

所以在上面的例子中,我希望看到

+  id  +  slot  +
+------+--------+
+   1  + 12:00  +
+------+--------+
+   3  + 12:06  +
+------+--------+

如果你 10 年前让我这样做,我想我可以在 15 分钟内把它交还给我,但我完全是空白。

我已经开始了一个连接查询,它根据timeslots.id 和signups.timeslotid 连接两个表。试图弄清楚如何过滤 count(signups.timeslotid) < 3 和 date = 2020-12-01 的位置

解决了:

在 ImCrimson 的指导下,这似乎成功了。

SELECT t.id, t.slot FROM timeslots t LEFT JOIN (SELECT * FROM signup WHERE date = '2020-12-01') s ON (t.id = s.timeslotId) WHERE t.enabled = 1 GROUP BY t.id, t.slot HAVING (COUNT(*) < 3)

标签: mysql

解决方案


我认为您正在寻找 HAVING 子句

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition]

推荐阅读