首页 > 解决方案 > 使用 php 和 mysqli 在 html 页面中消息传递如何工作?

问题描述

我正在建立一个有消息传递功能的网站,这个功能应该像任何正常的消息传递一样工作。单击味精链接/按钮时,它会向我们显示我们聊天的人员列表(还不是对话),然后再进入该特定人的个人味精(对话),我的问题是我得到了一个重复的朋友(另一个人的用户名)当我们两个都发送时,因为我有两列用户名(登录的人)和朋友(我与之联系的人)。

我相信我的问题是逻辑问题而不是代码,但我可能错了。我尝试过使用不同类型的逻辑,但无法得到我想要的。我也相信,如果我在 while 循环内的第二个“if”中给出正确的条件,它可能会起作用。检查我的表格和下面的代码:

Table chats:

username(fk)   friend    chats    
   a             b       Hi b
   b             a       Hi a

我的 PHP 和 SQL 代码是:

$username = $_SESSION['username'];
$sql = "SELECT DISTINCT username, friend FROM chats WHERE username = '$username' OR friend = '$username'";
            $result = $conn->query($sql);
            if($result->num_rows > 0)
            {
                while($row = $result->fetch_assoc())
                {               
                    if($username == $row['friend'])
                    {
                         echo "<a href = 'chat.php?usernames=".$row['username']."'>".$row['username']."</a>";
                    }   

                    if($username == $row['username'])
                    {     
                         echo "<a href = 'chat.php?usernames=".$row['friend']."'>".$row['friend']."</a>";
                    }                       
                }
            }

在上面的代码中,假设我是'a',我得到的是:'b'两次,而不是只有一个所以有两个'b',但我想要的只有一个'b'。假设第二条记录不存在,那么我只会得到一个'b',但是一旦我得到'b'的回复,它将显示2个'b',这意味着一旦有'a'和'b'的两条记录,就像在上表,将显示 2 'b'。还值得一提的是,由于我从 2 个不同的列中检查,查询中的 DISTINCT 将不起作用(如果只有 1 列而不是 2 列,我可以通过使用 distinct 解决问题)。请检查下图中的问题. 感谢您的帮助。在此处输入图像描述

标签: phpsqldatabase

解决方案


您可以使用 SQL 或 PHP 来处理它。

一个 PHP 示例:

$username = $_SESSION['username'];
$sql = "SELECT username, friend FROM chats WHERE username = '$username' OR friend = '$username'";
$result = $conn->query($sql);
$chat_list = array();
if($result->num_rows > 0)
{
    while($row = $result->fetch_assoc())
    {    
        $user = ($username == $row['username'] ? $row["friend"] : $row['username']);
        if(!in_array($user, $chat_list) && $user != $username)
        {
            $chat_list[] = $user;
        }
    }
}
foreach($chat_list as $a_chat)
{
    echo "<a href = 'chat.php?usernames=".$a_chat."'>".$a_chat."</a>";
}

推荐阅读