php—如何只推出表中唯一行的json?

omqzjyyz  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(320)

我的表设置为“senderid”、“receiverid”和“message”。换句话说,有很多信息在那里,但我已经设置了我的代码,只获得id的连接到我发送的id。我使用rest api调用执行此操作,如下所示:

http://myurl.com/Chat.php?UserID=18

然后,代码会将与用户进行消息传递的人的每个相反的id推出。不过,我遇到的问题是,我只想收集一次相反的id,因此如果在用户id 18和示例17之间生成了多条消息,那么json会多次将其推出,而不是仅1次。
这就是现在的样子:

{ "results": 
  [ 
    { "SenderID": "17", "RecieverID": "18" }, 
    { "SenderID": "18", "RecieverID": "17" },
    { "SenderID": "17", "RecieverID": "18" }, 
    { "SenderID": "17", "RecieverID": "18" }
  ] 
}

在现实中,我只想把它推出一次,看看他们是否曾经互相传递过信息。这样地:

{ "results": 
  [ 
    { "SenderID": "17", "RecieverID": "18" }, //push it out once
    { "SenderID": "18", "RecieverID": "34" } //then it will carry on to push out other matched id's
  ] 
}

发送的id是“senderid”(已发送消息)还是“receiveId”(已接收消息)并不重要。我只想看看他们有没有通过比较两个id发过信息。
这是我的密码:

<?php

class ConnectionInfo 
{   
    public $conn; 
    public function GetConnection() {

    $this->conn = mysqli_connect("serv", "user","pass", "db") or die(mysqli_error($mysql_pekare));

    }

}

$connectionInfo = new ConnectionInfo();
$connectionInfo->GetConnection();

if (!$connectionInfo->conn)
{
     echo 'No Connection';
}

else
{
    $UserID = $_GET['UserID'];
    $query = "SELECT * FROM MyTable WHERE (SenderID = '$UserID') OR (RecieverID = '$UserID')";

    $stmt = mysqli_query($connectionInfo->conn, $query);

    if (!$stmt)
    {
        echo 'Query failed';
    }

    else
    {
        $contacts = array(); 
        while ($row = mysqli_fetch_array($stmt)) 
        {
            $contact = array("SenderID" => $row['SenderID'],"RecieverID" => $row['RecieverID']);
            array_push($contacts, $contact); 
        }

        echo json_encode(array('results' => $contacts), JSON_PRETTY_PRINT);
    }
}
?>


然后,使用匹配的id加载一个对话,我用另一个线程解决了这个对话:如何通过restapi设置phpmyadmin和sql进行消息传递?

oxalkeyp

oxalkeyp1#

OR s在 WHERE 子句有时会生成重复项,并且表可能包含重复项。您的查询应该删除它们。试试这个

SELECT DISTINCT SenderID, RecieverID
      FROM MyTable
     WHERE SenderID = '$UserID' OR RecieverID = '$UserID'

如果给定一个userid,您需要一个向该用户发送消息和/或从该用户接收消息的所有其他用户的列表,请执行以下操作

SELECT SenderId FROM MyTable WHERE RecieverID = '$UserID'
    UNION
    SELECT RecieverID FROM MyTable WHERE SenderId = '$UserID'
``` `UNION` ,一个set操作,删除重复项。

相关问题