Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 了解用户是否已阅读帖子_Php_Mysql - Fatal编程技术网

Php 了解用户是否已阅读帖子

Php 了解用户是否已阅读帖子,php,mysql,Php,Mysql,好的,我为工作岗位创建了一个罚单系统 共有三个表格: 作业: id |主题|标志|状态|截止日期| ts 团队: id |作业id |用户id |职业 和交换: id |细节|异化|表格| polyflag | userID | ts 基本上,创建一个作业,将其插入作业,组建团队并将其插入团队,并将此特定作业的任何帖子和对话放入交换 但我想做的是找出一个用户是否没有阅读过某个特定工作中的任何帖子。因为现在,他们必须进入工作页面,看看里面有没有什么新的东西他们没有看到。如果他们的工作清单特别大,这

好的,我为工作岗位创建了一个罚单系统

共有三个表格:

作业
id |主题|标志|状态|截止日期| ts

团队
id |作业id |用户id |职业

交换
id |细节|异化|表格| polyflag | userID | ts

基本上,创建一个作业,将其插入
作业
,组建团队并将其插入
团队
,并将此特定作业的任何帖子和对话放入
交换

但我想做的是找出一个用户是否没有阅读过某个特定工作中的任何帖子。因为现在,他们必须进入工作页面,看看里面有没有什么新的东西他们没有看到。如果他们的工作清单特别大,这将成为一个问题

因此,如果一个用户发布了一些新内容,而他们还没有加载作业并看到它,我希望能够以某种方式向他们展示这一点。问题是我不知道怎么做


建议?

您可以添加一个包含用户id、作业id列的新表,每次有人查看作业时,您都会将其插入其中(仅为第一次),这样您就可以轻松地从该表中选择用户查看的作业,或者查看某个特定作业是否为用户查看

创建另一个名为readPostStatus的表,并使用用户id,postID和readStatus

然后在POST上,读取状态的所有状态都将为false。(有多种方式显示这些结果)


然后,当某个特定用户阅读文章时,编辑readPostStatus表,在readStatus中将该用户ID和postID标记为true,我认为您感兴趣的是作为作业团队一部分的用户,而不是创建作业的用户。我猜还有一个用户表(对于该表,
Team
中的
userID
是一个外键)

基本上您需要的是一个视图计数器,用于每个
用户
,用于每个
作业
。在我看来,这就像是两个表之间的多对多关系。我建议最好的方法是使用另一个名为
UserJob
或更有用的表,其中包含以下字段:
jobID
userID
viewCount
。加载作业页面时,通过用户加载页面,运行查询以检查此表中是否已存在加载作业的记录。如果没有,则创建它(并将计数初始化为1)。否则将增加视图计数

如果您不关心计数,只关心它是否被看到,那么您就不需要费心增加计数。您可能希望将字段命名为
hasSeen
或其他名称,而不是
viewCount


编辑:忘了说您可以通过查询此表和检查行是否存在(将
hasSeen
设置为1)轻松检查用户是否看到作业。根据您的结构,当用户被分配到作业时,您可能希望自动添加此表的行(将
hasSeen
设置为0)。

在这里看到答案后,我提出了自己的解决方案,因此为了记录,我将它放在这里;因为没有一个答案能让我满意

好的。因此,我对其他答案的反感实际上是因为我不想再创建一个表。我讨厌用毫无意义的表阻塞我的数据库,我想要一个更好的解决方案

因此,我将表
team
修改为:

团队:
id |作业id |用户id |职业|交换id

添加列
exchangeID
,该列基本上存储此用户已读取的最新exchange的ID。每次用户查看作业时都会更新此信息。很简单

然后,为了找出有多少新帖子,我简单地从
exchange
中抓取一个列表,列出与该作业相关的所有ID,并找出我的
团队
exchangeID
所在的列表中的位置,然后返回剩余的行给我未读的帖子

然后,我将这段代码(大约20行)插入到setInterval中,将数据加载到“作业视图”页面上的中,这样,如果有人在未经人员查看的情况下发布作业,则该代码将自动更新!平稳


谢谢你的帮助

显示帖子列表以及作业页面的链接(如果有帮助的话),那么用户只需查看帖子流,而不必查看单个作业(但如果他们想查看完整的作业记录,他们在那里有链接)是否没有基于时间戳的奇特方法?如果您对用户上次查看作业的时间感兴趣,然后可以存储时间戳而不是视图计数(可能使用NULL表示“从不”)。这将允许您计算某个用户是否看到某个作业在特定时间发生的更改。因此,当另一个用户发布到作业中时,我必须插入X行(每个用户1行),表示他们没有看到?然后在他们查看帖子时进行更改?从来没有提到可以发布到一个作业中,我以为他们只会添加另一个作业,但决不会少,是的,只需遍历所有允许的用户并插入他们的用户ID,这将是一个非常简单的查询,不会有很大的负载共享,因为您只是传递int,因此服务器不会承受压力。另外,一个好主意可能是使用ajax或jquery在文章中显示未读/已读条件