2013-06-20 49 views
0

上下文:事件調度軟件。MySQL:在查詢中查找相對值

由於有關查找重複的值上this question答案,我想出了下面的查詢,這完全適用於找到誰是在同一時間安排兩個事件用戶:

SELECT * 
FROM panel_participants pp 
WHERE EXISTS 
    (
    SELECT 1 
    FROM panel_participants pps 
    WHERE pp.user_id = pps.user_id 
    AND  pp.day_time_slot_id = pps.day_time_slot_id 
    AND  pp.day_time_slot_id > 0 
    LIMIT 1, 1 
    ) 

現在我需要是一個非常相似的查詢,但有一點不同:我想查找pp.day_time_slot_id = pps.day_time_slot_id + 2(這將顯示用戶已安排兩次連續事件的位置)的項目。但是,這返回零行:

SELECT * 
FROM panel_participants pp 
WHERE EXISTS 
    (
    SELECT 1 
    FROM panel_participants pps 
    WHERE pp.user_id = pps.user_id 
    AND  pp.day_time_slot_id = pps.day_time_slot_id + 2 
    AND  pp.day_time_slot_id > 0 
    LIMIT 1, 1 
    ) 

而且我知道有行應符合條件,例如,用戶503計劃在時間段23和25的項目。

我試着根據對this question的回覆設置變量,但我想我不理解變量如何工作並傳入和傳出查詢,因爲我嘗試的每件事都會返回一個錯誤或零行。我已經確認,day_time_slot_id是一個整數,以防有所作爲。

幫助?

+0

向我們展示一些示例數據 – Stephan

+0

請提供一些示例數據和預期結果 –

+0

您第一次查詢似乎沒有做您想做的事。它正在記錄並檢查相同的記錄是否出現在同一張表中。由於沒有任何東西可以排除始終與自身匹配的原始記錄。假設你有一個面板ID之類的東西,很容易修復。 – Kickstart

回答

1

假設你對panel_participants表panel_id下面應該讓你的誰擁有2個面板參加了同一時間段的人的名單: -

SELECT DISTINCT pp.user_id 
FROM panel_participants pp 
INNER JOIN panel_participants pps 
ON pp.user_id = pps.user_id 
AND pp.day_time_slot_id = pps.day_time_slot_id 
AND pp.panel_id != pps.panel_id 
AND pp.day_time_slot_id > 0 

下應該找那些有約會連續2個時隙(儘管不確定爲什麼連續時隙應該分開2個)。

SELECT DISTINCT pp.user_id 
FROM panel_participants pp 
INNER JOIN panel_participants pps 
ON pp.user_id = pps.user_id 
AND pp.day_time_slot_id + 2 = pps.day_time_slot_id 
AND pp.day_time_slot_id > 0 

害怕我無法測試這個(或是肯定的),因爲你沒有發佈表格佈局或數據。

+0

非常感謝!這看起來似乎給了我一個安排背對背項目的人員名單。 (下午1點,距離下午2點,因爲我有一個1:30的時間間隔,我爲此無視這一點)。 –