php - 消息传递如何使用 php 和 mysqli 在 html 页面中工作?

标签 php sql database

我正在构建一个具有消息传递功能的网站,此功能应该像任何普通消息传递一样工作。当单击消息链接/按钮时,它会向我们显示我们聊天的人员列表(还不是对话),然后再进入来自/到该特定人的个人消息(对话),我的问题是我有一个重复的 friend (另一个人的用户名)当我们俩都发送时,因为我有两列用户名(登录的人)和 friend (我发消息的人)。

我认为我的问题是逻辑问题而不是代码问题,但我可能错了。我尝试过使用不同种类的逻辑,但无法得到我想要的。我还相信,如果我在 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 来解决问题)。请检查下图中的问题.感谢您的帮助。 enter image description here

最佳答案

您可以使用 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>";
}

关于php - 消息传递如何使用 php 和 mysqli 在 html 页面中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728883/

相关文章:

PHP:如何用键和值填充数组,以便 1 = 1、2 = 2、3 = 3 等

java - 是否可以通过查询获得列中最大输入NUMBER值?

sql - 如何将UNION查询视为子查询

sql - MySQL 5 : Does it matter what order my GROUP BY fields are in?

SQL - EXISTS 未引入子查询

python - 有关数据输入表格的查询

c# - 从数据库列动态创建 C# 属性

javascript - 使 div 在 foreach 循环中出现的问题

php - Laravel - 如何查询数据库中的数组字段是否包含值

php 包括不在我的 html 上工作