[我正在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();
}
下面是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();
}