如何根据用户计算所有查询的新回复

时间:2013-11-07 21:57:29

标签: asp.net sql tsql

我有一个crm应用程序。我在消息线程上工作,发现一个麻烦。当我不得不显示每个用户提出的多个查询的新回复时。就像facebook一样,当你登录你的帐户时显示'评论计数器'然后它显示没有新的回复。我怎么只想数不显示摘要报告。

这里我已经包含了我的表层次结构,它提供了基本的想法。

enter image description here

我只计算员工用户对最终用户提出的多次查询的新回复。当用户登录他的帐户时,我怎么想要计算AnswerId的总数(由员工用户给出的回复)。

请告诉我如何实现这一点。

1 个答案:

答案 0 :(得分:1)

declare @user_id int  -- I assume this is an integer

set @user_id=123  -- the user_id you are interested in

select count(*)
from tbl_answer a
join tbl_question q on q.id=a.question_id
join tbl_inquiry_history i on i.inquiry_id=q.inquiry_id
where i.user_id = @user_id

要在上次登录后通知用户“新”答案,您有两个主要选择: -

  1. 将用户知道的答案数存储在用户记录中 - 这样,下次登录时,您可以告诉他们创建了多少“新”答案。这被称为“高水印”。用户记录有10个存储为高水位线。他们登录。系统计算用户现在有多少答案,并找到15个答案 - 所以5个必须是新的 - 并向用户界面添加一个消息计数,说“5个新答案”(并将高水位更新为15)
  2. 如果用户已阅读该特定答案,则在每个答案上存储一个标记以进行记录。每当添加答案时 - 未设置标志。每当用户读取答案时,都会设置标志。系统会定期计算没有设置标志的用户存在多少个答案 - 如果找到任何答案,则显示一条消息。
  3. 选项1“快速而肮脏”。它很容易实现。它也是最没用的。用户接下来要问的是“好的。那么哪些答案是新的?”。如果您可以按照创建的顺序对答案进行排序,您可以(从上面的示例中)向他们展示最新的5个答案 - 但这与您可以做的一样多。他们没有粒度能够阅读其中一个答案并返回列表并缩短列表(取出他们刚刚阅读的答案) - 没有你(作为开发人员)跳过一些复杂的箍操纵列表

    选项2是更复杂的解决方案,但提供了用户可能期望的界面类型(如Facebook或StackOverflow)。聪明的是不要使用bool / bit作为你的标志 - 这只能让你跟踪用户是否已经阅读了答案。如果您使用日期时间,您还可以跟踪他们何时阅读答案 - 这样可以更多地分析系统的使用方式。

    您(或者更确切地说,您的用户)需要决定您使用哪种方法 - 每个答案上都有一个简单的高水印或粒状标记。如果你从选项1开始,你几乎肯定必须在某个时候实现选项2 - 所以你也可以用字节(lol)子弹并且第一次“正确”执行它。