亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查重疊以及是否已取值

檢查重疊以及是否已取值

PHP
精慕HU 2022-12-23 16:34:16
我正在嘗試編寫一個 SQL 查詢,該查詢必須檢查兩個小時之間是否存在重疊以及是否已經選擇了某些值。例如,你在一個表中有一條記錄,你需要用數據填充一個表單。使用 SQL 查詢,您需要檢查表中的小時數與您在表單中選擇的小時數之間是否存在重疊,但您還需要檢查表中選擇的其他數據是否尚未在表中使用與表中的另一個數據。我的問題是檢查值是否已經在表中,這樣我就可以返回一個錯誤,指出這些數據已被使用。明確地說,您有那些需要驗證的數據。你有時間、房間、老師和課程。您必須檢查是否檢測到時間重疊(我對這部分沒問題),但您還需要檢查老師是否已經在某個房間里教授某門課程(您不能讓老師在兩個不同的地方),如果一個房間還沒有被占用,也如果一門課程還沒有被占用。我實際上有這個 SQL 查詢,但它不是一個正確的查詢,因為當我用兩個小時(例如:08:00 和 12:00)、一個老師(例如:老師 A)、一個房間(例如:房間 A)進行插入時和課程(例如:課程 A),沒有問題,因為它是表中的第一個插入。但是當我在不換老師的情況下換房間(A房間到B房間)檢查是否會報錯(因為老師不能同時在兩個不同的地方),有' 沒有錯誤,并且在表中進行了插入。我會給你我的 SQL 查詢:select * from `reservations`where heure_debut <= '08:00' and heure_fin >= '08:00' and heure_debut <= '09:00' and heure_fin >= '09:00' and reservations.local_id = 1 and exists (select * from `reservations` where reservations.enseignant_id = 1) and exists (select * from `reservations` where reservations.Event_id = 1)我試圖了解我失敗的地方,但我不知道在哪里。預先感謝您的回答。
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我認為你采取了錯誤的方式,對我來說這是一個否定的檢查,如果它給你帶來超過 0 行,它將失?。?/p>


是否有任何課程在同一地點同時進行?

或者我的老師是否應該同時開設任何其他課程?

如您所見,OR您的查詢中有一個 I can't find 。(我不明白你Event_id的意思,所以我可能會在這里錯過任何東西)


在制品

這部分至少可以回答你問題的一大部分,告訴我什么仍然不適合你。


SQL小提琴

查詢 1:


SET -- this is your input you try to check 

@local_id = 1, 

@heure_debut = '08:00', 

@heure_fin = '09:00',

@enseignant_id = 1

結果


查詢 2:


-- if it return more that 0 record, then you have a conflict

SELECT 

  r.id AS id_line_in_conflict

  , r.* -- for debug

FROM `reservations` r

WHERE 

  heure_debut < @heure_fin 

  AND heure_fin > @heure_debut 

  AND (

    local_id = @local_id -- check if the local is empty

    OR enseignant_id = @enseignant_id -- check if the teacher is free

    )

結果


| id_line_in_conflict | id | numero_semaine |                 date | heure_debut | heure_fin | Event_id | horaire_id | local_id | enseignant_id |

|---------------------|----|----------------|----------------------|-------------|-----------|----------|------------|----------|---------------|

|                   1 |  1 |             16 | 2020-04-17T00:00:00Z |       08:00 |     12:00 |        1 |          4 |        1 |             1 |

|                   2 |  2 |             16 | 2020-04-17T00:00:00Z |       08:00 |     09:00 |        1 |          4 |        2 |             1 |

查詢 3:


SET -- this is your input you try to check 

@local_id = 1, 

@heure_debut = '14:00', 

@heure_fin = '15:00',

@enseignant_id = 3

結果


查詢 4:


-- if it return more that 0 record, then you have a conflict

SELECT 

  r.id AS id_line_in_conflict

  , r.* -- for debug

FROM `reservations` r

WHERE 

  heure_debut < @heure_fin 

  AND heure_fin > @heure_debut 

  AND (

    local_id = @local_id -- check if the local is empty

    OR enseignant_id = @enseignant_id -- check if the teacher is free

    )

結果



查看完整回答
反對 回復 2022-12-23
  • 1 回答
  • 0 關注
  • 77 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號