2014-02-15 40 views
0

我有四個表數據庫:我應該如何構建這個MySQL查詢?

users 
- id 
- name 

sessions 
- id 
- title 

sessions_users 
- id 
- sessions_id 
- users_id 

session_feedback 
- id 
- sessions_id 
- users_id 

用戶都設置爲參加某些會議(加入他們的ID給sessions_users表)。用戶還需要在會話中留下反饋。完成後,會話(sessions_id)和用戶留下反饋(users_id)的ID的ID輸入到session_feedback表。

對於一個特定的用戶的ID,我無法弄清楚如何選擇具有有反饋尚未會議(即存在session_feedback同時含有sessions_idusers_id沒有條目)。即我需要選擇所有有待反饋的會話。

任何人都可以幫忙嗎?

回答

1

您可以使用LEFT做加盟。

SELECT s.* FROM sessions s 
LEFT JOIN session_feedback sf ON sf.sessions_id = s.id 
WHERE sf.session_id IS NULL 

查詢只需從sessions表,其中有沒有鏈接到feedback表(從而給你不反饋會議)檢索的所有記錄。如果您想要包含沒有反饋的用戶的會話。

SELECT s.* FROM sessions s 
INNER JOIN sessions_users su ON su.sessions_id = su.id 
INNER JOIN users u ON su.user_id = u.id 
LEFT JOIN session_feedback sf ON sf.users_id = u.id 
WHERE sf.session_id IS NULL 

爲了進一步提高或收緊查詢,只需添加到WHERE條款。

2

這是你想要的嗎?這將返回尚未反饋的所有會話ID和標題。

select sessions.id, sessions.title 
    from sessions where sessions.id NOT IN 
     (select sessions_id from session_feedback) 

而對於一個特定的用戶:

SELECT sessions.id, sessions.title 
    FROM sessions INNER JOIN sessions_user on 
     sessions.id = sessions_user.sessions_id 
    WHERE sessions.id NOT IN (select sessions_id from session_feedback) 
    AND sessions_user.users_id = [given user id]