2017-02-15 37 views
-3

使用連接三個表中的記錄中選擇號碼,我有組模型,用戶模型,票務模型使用單個查詢

集團has_many_and_belongs_to用戶和用戶的has_many票

**Groups** 

id | name | user_id 

**User** 

id | name | group_id 

**Ticket** 

id | title | group_id | user_id 

我想要檢索的門票數量屬於特定組的間隔

特定時間的用戶我已經試過這一個,但沒有奏效。

select t.user_id, t.group_id ,count(t.id), (select count(t.id) 
from tickets t 
where created_at < current_timestamp - INTERVAL '24 hours') 
from tickets t 
LEFT OUTER JOIN groups ON g.id=t.group_id 
LEFT OUTER JOIN users u ON u.id=t.user_id 
GROUP BY t.user_id, t.group_id; 

我該如何在單個查詢中做到這一點?

感謝

+0

MySQL和postgresql是兩個不同的prodicts。我刪除了衝突的產品標籤。請添加您需要的信息或提供額外的解釋,說明您爲什麼用多個產品標籤標記您的問題。 – Shadow

+0

ticket_id和id在同一張表中...你確定嗎?我也認爲user_id丟失... – devoh

+0

感謝您的更正@devoh –

回答

0

如果你只是想USER_ID,GROUP_ID和CNT:

SELECT t.user_id, t.group_id , COUNT(t.id) cnt 
FROM tickets t 
WHERE t.created_at < (current_timestamp - INTERVAL '24 hours') 
GROUP BY t.user_id, t.group_id 

如果您想查詢和/或檢索USER_NAME:如果您想查詢

SELECT t.user_id, t.group_id , COUNT(t.id) 
FROM tickets t 
    INNER JOIN users u 
    ON u.id = t.user_id 
     AND u.name = 'USER_NAME' 
WHERE t.created_at < (current_timestamp - INTERVAL '24 hours') 
GROUP BY t.user_id, t.group_id 

通過和/或檢索組名稱:

SELECT t.user_id, t.group_id , COUNT(t.id) 
FROM tickets t 
    INNER JOIN groups g 
    ON g.id = t.group_id 
     AND g.name = 'GROUP_NAME' 
WHERE t.created_at < (current_timestamp - INTERVAL '24 hours') 
GROUP BY t.user_id, t.group_id 

如果你想查詢和/或檢索user_name和組名:

SELECT t.user_id, t.group_id , COUNT(t.id) 
FROM tickets t 
    INNER JOIN users u 
    ON u.id = t.user_id 
     AND u.name = 'USER_NAME' 
    INNER JOIN groups g 
    ON g.id = t.group_id 
     AND g.name = 'GROUP_NAME' 
WHERE t.created_at < (current_timestamp - INTERVAL '24 hours') 
GROUP BY t.user_id, t.group_id