我正在创建一个系统,用户可以在其中编写当前状态,其他用户可以发表评论。
如果有人对用户的状态发表了评论,则会通知用户,但我遇到了编码此行为的问题。
我希望的行为是这样的:如果我对我的状态有一个评论(当然是一个用户):
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
的单个消息。
如果有什么不清楚请发表评论,我会更新我的问题。
答案 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