如何在sql中计算两个用户之间的消息对话

问题描述 投票:0回答:1

[我正在PHP MYSQLI中创建两个用户之间的消息对话脚本。我想知道如何计算两个用户之间的未读消息。我想在我的代码中添加计数脚本。

我的pm数据库表

id  from_id    to_id     msg               sent_date              read
1   2          3         hi how are you?   2019-12-05 04:14:20    1
2   3          2         fine              2019-12-05 05:15:58    0
3   2          3         hi                2019-12-05 03:20:34    0
4   5          2         hi                2019-12-05 08:30:40    1

这是我的源代码

  if (isset($_SESSION['userid'])) {
        $session_id = $_SESSION['userid'];
      }
           $sql = "SELECT *,
      (SELECT username FROM users WHERE userid=from_id) AS from_username,
      (SELECT username FROM users WHERE userid=to_id) AS to_username,
      (SELECT username FROM users WHERE userid=?) AS my_username,
      (SELECT profile_pic FROM users WHERE userid=from_id) AS from_profile_pic,
      (SELECT profile_pic FROM users WHERE userid=to_id) AS to_profile_pic,
      (SELECT profile_pic FROM users WHERE userid=?) AS my_profile_pic
      FROM pm WHERE from_id = ? OR to_id = ? ORDER BY id DESC";

    if ($stmt = $con->prepare($sql)) {
         $stmt->bind_param('iiii', $session_id, $session_id, $session_id, $session_id);
         $stmt->execute();
       }
php sql
1个回答
0
投票

下面是SQL查询,您可以将它们转换为PHP脚本。

例如:SQL查询:

1)假设我们正在检索用户ID 3的未读消息列表,下面将是相同的查询:

SELECT `pm`.`from_id`, `users`.`username` AS `from_name`, `pm`.`msg`, `pm`.`sent_date` 
FROM `pm` 
INNER JOIN `users` ON (`pm`.`from_id` = `users`.`userid`) 
WHERE `pm`.`to_id` = 3 AND `pm`.`read` = 0 
ORDER BY `pm`.`id` DESC;

2)假设我们只是在统计用户ID 3的未读消息列表,下面将是相同的查询:

SELECT `pm`.`to_id`, COUNT(*) AS `unread_message_count` 
FROM `pm` 
WHERE `pm`.`to_id` = 3 AND `pm`.`read` = 0 
GROUP BY `pm`.`to_id`;

PHP脚本:

if (isset($_SESSION['userid'])) {
    $session_id = $_SESSION['userid'];
}

$sql = "SELECT `pm`.`to_id`, COUNT(*) AS `unread_message_count` 
        FROM `pm` 
        WHERE `pm`.`to_id` = ? AND `pm`.`read` = 0 
        GROUP BY `pm`.`to_id`;";
if ($stmt = $con->prepare($sql)) {
    $stmt->bind_param('i', $session_id);
    $stmt->execute();
}
© www.soinside.com 2019 - 2024. All rights reserved.