如何为状态系统显示正确数量的注释?

时间:2010-10-31 18:26:36

标签: php

我正在创建一个系统,用户可以在其中编写当前状态,其他用户可以发表评论。

如果有人对用户的状态发表了评论,则会通知用户,但我遇到了编码此行为的问题。

我希望的行为是这样的:如果我对我的状态有一个评论(当然是一个用户):

echo "user has commented your status"

如果我的两个状态中有两条评论(两者都来自同一用户):

"user has commented your status" 
"user has commented your status" 

(文本应打印两次,每种状态为一种状态)

如果我在我的2个状态中有3条评论(其中第一个状态有1个评论来自一个用户,第二个状态有2个不同用户评论)

echo "More than one users has commented your status"
echo "user has commented your status"

因此,如果我在1状态中有2条评论(其中两条评论都是不同的用户而不是相同的)

echo "More than one users has commented your status"

总结一下:我的系统应该只回显一次EACH状态通知。如果来自一个用户的一条评论或一个用户的更多评论,您将获得:

echo "user has commented your status"

但如果评论来自一个状态的不同用户,您将获得:

echo "more than one has commented your status

当用户发表评论时,它还会在users_msgs行中保存:

uID | nData | icon
  • uID包含状态创建者的ID(不是评论用户的ID)
  • icon包含评论用户的ID。
  • nData包含状态ID。

(请不要评论列的名称)

我该怎么做?我不知道从哪里开始。

我应该知道的唯一事情是查询应该是uID = '$USER'(其中$USER是登录用户的ID)。但是,如何检查是否有多个用户对每个状态ID(nData)进行了评论,如果没有显示user has commented on your status的单个消息。

如果有什么不清楚请发表评论,我会更新我的问题。

2 个答案:

答案 0 :(得分:4)

只需更改查询方式即可。您要查找的是评论特定状态和评论数量的用户数。根据这两条信息,您可以确定要打印的内容。

如果您使用GROUP BY分组语句,则可以汇总有关每条状态消息的数据。您应该按状态消息的ID进行分组,这是nData。然后,您需要做的就是计算唯一身份用户的数量(icon的唯一值)以及注释的原始数量,这可以使用COUNT(*)来实现。

 SELECT uID, nData, 
     COUNT(DISTINCT icon) as num_commenting_users, 
     COUNT(*) as num_comments 
 FROM users_msgs WHERE uID=$USER GROUP BY nData

现在num_commenting_users会告诉您已对状态为nData的用户进行评论的唯一身份用户数量,而num_comments会告诉您已对状态为{id}的评论数量{1}}。

对于此查询返回的每一行,您可以进行简单的检查,如果有多个唯一的评论用户,则打印“多个已注释您的状态”,否则打印“用户已注释您的状态”:

nData

答案 1 :(得分:0)

对于每个用户的每个状态更改,您应该具有“not read comments count”变量。例如,用户“USER”已将其状态更改两次:

user_id  status  not_read_comments_count
USER     BUSY    0
USER     AVAIL   0

人们对状态变化留下了一些评论:

user_id  status  not_read_comments_count
USER     BUSY    2
USER     AVAIL   1

当“USER”返回网站并读取他的个人资料时,您的程序会针对每个状态更改显示“not_read_comments_count”并产生:

“您对自己的状态有2条评论”    “你对你的状态有1条评论”

在屈服之后,将所有“not_read_comments_count”重置为0:

user_id  status  not_read_comments_count
USER     BUSY    0
USER     AVAIL   0