如果我理解正確你的問題,如
1)管理用戶......他們可以看看一切,因爲他們將不得不在user_client表中沒有記錄。
2)客戶主管......這樣的主要責任人是特定的客戶(或多個客戶)。因此,用戶在user_client表中有一個記錄。如果是這樣,那麼只允許用戶查看他們與之關聯的客戶的記錄。
select
m.message_id,
m.client_id,
m.description,
c.name as clientName
from
(select count(*) as HasClients
from user_client
where user_id = TheUserYouWant) ClientCheck,
message m
left join user_client uc
on m.client_id = uc.client_id
AND uc.user_id = TheUserYouWant
join client c
on m.client_id = c.client_id
where
ClientCheck.HasClients = 0
OR NOT uc.user_id IS NULL
該查詢查看user_client表TWICE。第一次只是對給定用戶存在的那些記錄進行計數,而不管與哪個客戶端關聯。查詢將總是返回1行,它將爲0(無此類記錄),或者大於1(無論它們與多少個記錄相關聯)。
第二個實例是左連接到user_client表,只是在情況下,人員被限制爲僅查看他們自己的客戶端消息。
WHERE子句現在進入並說...如果客戶端的基礎計數爲零,那麼可以給我所有的消息。如果有任何其他值,則user_client表中的用戶標識(作爲客戶和用戶所需的消息的左連接)必須爲EXIST(通過非user_id列的NULL值)。
現在,您可能不希望查詢EVERY消息,因爲它可能會隨着數據庫的增長而變得相當大,但是您可以在WHERE子句中添加任何其他條件,例如日期限制和/或客戶端,你有興趣
您能否顯示您正在嘗試修復的查詢? – Alex 2015-02-23 17:37:08
你在這裏?你會回答我的問題嗎?並顯示預期的結果? – Alex 2015-02-23 18:23:57
嗨,亞歷克斯!剛剛看到你的消息。我沒有完成查詢,因爲我意識到正在走錯方向,我錯過了一些東西。但是,這是我有什麼: 選擇 \t \t \t message.message_id, \t \t \t message.description \t \t FROM \t \t \t消息 \t \t WHERE \t \t \t discussionMessage.insertWhen> = DATE_SUB(NOW( ),INTERVAL 5 MINUTE) \t \t \t AND \t \t \t IF((SELECT COUNT(1)FROM user_client WHERE USER_ID = user.user_id)> = 1 \t \t \t \t \t \t message.clientId IN( \t \t \t \t SELECT \t \t \t \t \t CLIENT_ID \t \t \t \t FROM \t \t \t \t \t user_client \t \t \t \t WHERE \t \t \t \t \t user_client.userId = {} USERIDHERE \t \t \t),) – Kitara 2015-02-23 18:37:24