【问题标题】:MySQL - Chaining multiple SQL commandsMySQL - 链接多个 SQL 命令
【发布时间】:2015-02-06 20:04:51
【问题描述】:

我查看了多个线程,但似乎无法为我的问题找到理想的答案。我正在创建一个带有调度程序的系统,我需要多个链才能让查询返回答案。所以这里是场景。用户需要注册,注册后,用户会看到一个日期。

  1. 我有用户表,其中列出了用户(显然)。这里有一栏是日期。
  2. 还有一个存储日期的日期表。每个日期只能容纳 30 人。
  3. 日期表也有可用性列。如果日期可用,则标记为 1。如果日期已过期(当前日期高于此日期),则标记为 0。

例如,我有日期 1 月 1 日、1 月 2 日和 1 月 3 日,当前日期是 1 月 2 日。显然,1 月 1 日应该过期。这不会包含在列表中,因此我将可用性设置为 0(是的,手动)。只有1月2日和1月3日。我还需要找到1月2日是否容纳了30人。否则,我需要把他安排到 1 月 3 日。我得到了一堆我不知道如何链接的代码部分。

预期输出: query1(1 月 2 日和 1 月 3 日应该是结果)

SELECT * FROM rooms WHERE availability = 0

RoomID    Room Date    Room Availability
1         Jan 1        1
2         Jan 2        0
3         Jan 3        0

query2 -(统计分配到特定房间的人数)

    SELECT COUNT(RoomAssigned) FROM users

Users        RoomAssigned
Jack         2
Eddie        2

query3 - (系统应该能够找到第一个可用的房间) 如果(查询2结果

如果我正在寻找的链接可能不可取,我愿意接受不同的建议。谢谢。 :)

【问题讨论】:

  • 我不明白查询 1 的输出。你说WHERE availability = 0,为什么它显示房间availability = 1?
  • 您在顶部列出了两个表:users 和 date。查询 1 中的 rooms 表是什么?

标签: mysql sql


【解决方案1】:

您的问题似乎对您拥有哪些表以及其中的内容非常困惑,我看不出您的示例查询如何产生您显示的输出。但似乎这个查询会做你想做的事:

SELECT *
FROM rooms
WHERE availability = 1
AND roomID NOT IN (
    SELECT roomAssigned
    FROM users
    WHERE availability = 1
    GROUP BY roomAssigned
    HAVING COUNT(*) >= 30)
ORDER BY roomDate 
LIMIT 1

子查询查找所有已入住的房间,然后我们从主查询中排除这些房间。然后我们按日期对剩余的房间进行排序,选择第一个带有LIMIT 1的房间。

【讨论】:

    【解决方案2】:

    我想你会想要这样的东西:

    SELECT  r.[RoomID],
        r.[Room Date]
    FROM    rooms r
    LEFT JOIN users u
        ON r.[RoomID] = u.[RoomAssigned]
    WHERE   r.[Room Date] >= CURDATE()
    GROUP BY r.[RoomId], r.[Room Date]
    ORDER BY r.[Room Date], r.[Room Id]
    HAVING COUNT(u.[RoomAssigned]) < 30
    LIMIT 1
    

    我尚未对其进行测试,因此可能需要进行一些调整。这就像@Barmar 的答案,只使用连接而不是嵌套选择。我还根据当前日期检查了可用性,而不是 availability 列,我认为不应该将其存储在数据库中,因为它可以根据房间日期确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多