-1

我有一个应用程序,我在其中向我的登录代理显示所有投诉。我有 100 个代理可以看到相同的投诉屏幕。例如代理 A 和代理 B 在登录时可以看到所有投诉。

> Complaint_id  Complaint_detail
        1            complaint_1    
        2            complaint_2    
        3            complaint_3    

现在的问题是我必须添加每个代理都可以轻松发表评论的功能,或者您可以说一个提醒,例如(agentA 发表评论:我明天将处理此评论)。所以这个评论将只显示给agentA。

对于这个实现,我创建了一个名为complaint_detail 的新表,我在其中添加了coloumn 'comment' 和'user_id'

并显示投诉我写查询

    select complaint.Complaint_name,complaint.User_ID from complaint 
left outer join complaint_detail on complaint.Complaint_id = complaint_detail.complaint_id

这个查询现在显示所有记录当我过滤用户时它只会显示用户记录来解决这个我添加

    select * from (select complaint.Complaint_name,complaint.User_ID from complaint 
left outer join complaint_detail on complaint.Complaint_id = complaint_detail.complaint_id
complaint_detail.complaint_info_id
) asdf

其中 user_id = 'agentA' 或 User_ID 为空

select * from (
select complaints.complaint_id,complaints.complaint_detail,   complaints_detail.comment,complaints_detail.user_id from complaints
left outer join complaints_detail on complaints.Complaint_id = complaints_detail.complaint_id
) asdf
where user_id = 'agentA'
or User_ID is null

complaint_id    complaint_detail    comment        user_id
         1             complaint_1         complaint_1  agentA
         2             complaint_2         complaint_2  agentA
         3             complaint_3           null            null

代理 B

complaint_id    complaint_detail    comment        user_id
     1             complaint_1          complaint1_ agentB
     3             complaint_3           null            null

任何想法我怎样才能做到这一点,每个用户都可以看到所有的投诉,只有他们的意见。我应该改变表结构或查询可以做到这一点吗?

4

1 回答 1

0

这样的事情应该这样做:

select * from complaints cmp
left outer join comments com on cmp.id=com.complaint_id
and com.user_id='agentA' or com.user_id is null 

这将从与投诉相关的评论表中获取数据(如果存在)(左连接),并将评论限制为代理的评论或评论中没有用户 ID

当然,如果您不想从投诉和评论表中检索所有列,您可以在 select 中指定列。

于 2013-08-14T15:33:20.567 回答