gpt4 book ai didi

mysql - 在 SQL 查询中运行检查(也许是子查询?)

转载 作者:行者123 更新时间:2023-11-30 21:38:12 25 4
gpt4 key购买 nike

我有一个简单的笔记本电脑测试预约系统,有 6 台笔记本电脑,名为 Laptop01 到 06,每台笔记本电脑都有三个分配的时间段。

如果时段未被预订或预订已被取消/拒绝,用户可以选择这些时段。

虽然我有可用的代码,但我发现了一个 fatal error ,该错误导致已取消/拒绝的广告位重复。

让我解释一下......

Database Design

  • event_information - 保存预订事件信息(只有 ID 是这个例子需要)
  • event_machine_time - 这包含所有笔记本电脑,每台笔记本电脑三排,提供独特的计时可供选择
  • event_booking - 这包含实际预订,它然后链接到另一个候选人数据库,此处未包含

然后我运行一个简单的查询,将所有内容连接在一起并(我认为)识别预订的事件:

SELECT machine_laptop, machine_name, B.id AS m_id, C.id AS c_id, C.confirmed AS c_confirmed, C.live AS c_live, 
(C.id IS NOT NULL AND C.confirmed !=2 AND C.live !=0) AS booked
FROM event_information A
INNER JOIN event_machine_time B ON ( 1 =1 )
LEFT JOIN event_booking C on (B.id = C.machine_time_id and A.id = C.information_id )
WHERE A.id = :id
ORDER BY `B`.`id` DESC

booked 正在检查 confirmed 是否不是 2 - 这意味着预订已被取消/拒绝(0 - 未确认,1 - 已确认)和 live 正在检查是否删除(0 - 已删除,1 - 未删除)。

但是,如果一个人被删除(live - 0)或取消/拒绝(confirmed - 2),那么在我的前端插槽选择器下拉列表中它会添加一个extra slot 因为 booked 列仍然是 0,如下所示:

enter image description here

这允许用户同时从两个时段中进行选择,这意味着会发生重复预订。

我现在知道使用 Join 是错误的做法,我假设我需要运行子查询,但我不是 SQL 专家,我希望能得到一些帮助来找到类似 '我可以从中学习的第二个查询。

如果我的术语有误,我也深表歉意。

编辑:

根据要求,我包含了输出:

enter image description here

第二次编辑和结论:

最后,我设法使用子查询一起设计了一个解决方案,以在输出之前删除已取消/拒绝的预订,然后使用分组依据仅显示每个时间之一。这很可能不是最好的方法,但它对我有用。

SELECT machine_laptop, machine_name, B.id AS m_id, C.id AS c_id, C.confirmed AS c_confirmed, C.live AS c_live, B.start_time AS b_start_time, (
C.id IS NOT NULL
AND C.confirmed !=2
AND C.live !=0
) AS booked
FROM event_information A
INNER JOIN event_machine_time B ON (1=1)
LEFT JOIN (SELECT * FROM event_booking WHERE confirmed <> '2' AND live <> '0') AS C ON ( B.id = C.machine_time_id AND A.id = C.information_id )
WHERE A.id = :id
GROUP BY m_id
ORDER BY machine_name ASC, b_start_time ASC

感谢您的所有投入。

最佳答案

尝试以下:

SELECT machine_laptop, machine_name, B.id AS m_id, C.id AS c_id, C.confirmed 
AS c_confirmed, C.live AS c_live,
(C.id IS NOT NULL AND C.confirmed !=2 AND C.live !=0) AS booked
FROM event_information A
LEFT JOIN event_booking C ON A.id = C.information_id
RIGHT JOIN event_machine_time B ON B.id = C.machine_time_id
WHERE A.id = :id
ORDER BY `B`.`id` DESC

关于mysql - 在 SQL 查询中运行检查(也许是子查询?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52946037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com