如何统计PHP mysql中已读和未读的消息

如何统计PHP mysql中已读和未读的消息,php,html,mysql,Php,Html,Mysql,我想对Mysql中的已读和未读邮件进行计数 这是我的PHP代码: <?php $dbdata = "SELECT * FROM users"; if ($result = mysqli_query($db, $dbdata)) { if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_array($result)) { echo "<li class=online'>&

我想对Mysql中的已读和未读邮件进行计数

这是我的PHP代码:

<?php

$dbdata = "SELECT * FROM users";

if ($result = mysqli_query($db, $dbdata)) {
  if (mysqli_num_rows($result) > 0) {

    while ($row = mysqli_fetch_array($result)) {

      echo "<li class=online'><a href='?user=" .
        $row['username'] .
        "'><img alt='user pics' src='img/demo/av1.jpg' /> <span>" .
        $row['fname'] . ' ' .
        $row['lname'] . "</span><span class='msgcount'> 0</span></a></li>";

    }
    mysqli_free_result($result);

  } else {
    echo "No Students Found.";
  }

} else {
  echo "ERROR: Could not able to execute. ";
}

?>
我希望0显示该用户未读邮件的计数。如果用户已被单击,则未读消息将变为0,因为单击时会显示消息

你能帮我解决这个逻辑吗?我只想通知你有一条未读的消息。谢谢大师们,请帮帮我

这是聊天信息的输出图像:


在数据库中,创建数据类型为int1默认值0的列状态

如果我阅读了消息,请使用1更新状态,默认情况下,我们使用的是0,这意味着它的消息未读

现在开始计时。创建两个变量$total_read=0和$total_unread=0

在你的while循环中,你可以这样做

while($row = mysqli_fetch_array($result)) {  
    if($row['status'] == 0)
    {
        $total_unread = total_unread + 1
    } else {
        $total_read = total_read + 1
    }
}

我是php新手。因此,在给出更好的答案之前,这可以作为替代方案


您可以创建一个与邮件类似的表。然后在发送消息时,将数据插入两个表中。接下来,以正常方式选择您的邮件。并从“外观相似”表中选择行数,然后在未读邮件的范围内打印。然后单击onclick让mysqli从looksamele表中删除消息。使用jquery自动更新span。

我假设除了用户表之外,您还有一个消息表

我将大胆地假设您的messages表如下所示:

id int pk,
to_user_id int fk,
from_user_id int fk,
read bool default false,
title varcher(250),
body text,
created_at datetime,
updated_at datetime
因此,用户和消息有1:M的关系,这是理所当然的

您可以在每次页面加载或每隔几秒钟加入、过滤和统计用户和消息

 SELECT u.id, u.name as from, count(1) as total
 FROM users AS u
 JOIN messages AS m on u.id = m.from_user_id
 WHERE 
       to_user_id = ? -- this is the authenticated user id!
       AND `read` is false
 GROUP BY from_user_id
这将为您提供如下元组:

id,from,total 22岁,约翰,1岁 124,弗兰克,3岁 523,鲍勃,1 11岁,大卫,3岁 但这需要做更多的工作,因为这只会返回未读消息的用户。因此,您可以轻松地检查是否有朋友发送的消息

如果您只想显示一般邮件数量,例如在横幅上:

SELECT count(1) FROM messages WHERE `read` is false and to_user_id = ? -- ? is the authenticated user id
额外:

还有很多更奇特的方法,比如使用redis缓存消息计数

我刚才描述的可能是更简单的,并且使用零辅助基础设施,也就是burn mysql burn策略

专业提示:

如果您的应用程序将严重依赖消息,如松弛类型的应用程序,那么将消息存储在SQL数据库中不是一个好主意。但如果你只是在学习或修补,那就去吧!
这张桌子看起来像什么?MySQL已经被贬低了相当长的一段时间,考虑使用PDO。instead@vivick这对我来说是个新闻。我们可以调用事实检查器吗?另外,我是新imn,不使用PDO风格的PHP。如果我使用PDO是它将使安全性更好??或者我能得到什么好处@Vivick@Vivick>>@villabetting除了作为对您使用的任何数据库的抽象之外,mysqli可能会从php中完全消失,而PDO目前可能不会,但我有一个表名stats wait,我向您显示表结构>>这是图像链接,先生。我该如何回应这两个变量,先生?对不起,只是新来的,先生。这么多问题,先生,结果是这样的。它只显示了1个,先生,我不明白用php打印两个变量是什么意思,正如我所理解的,如果你想回显两个变量,请在变量之间使用句号。如