php - 如何从每两个用户对话中获取最后一条消息
问题描述
我正在创建消息对话脚本,我想从每两个用户对话中获取最后一条消息。我的脚本显示所有 from_id 消息。任何人都可以帮助我,我已经尝试了很多。
我的数据库pm表结构
id from_id to_id msg sent_date
1 2 3 hi how are you? 2019-12-05 04:14:20
2 3 2 fine 2019-12-05 05:15:58
3 2 3 hi 2019-12-05 03:20:34
4 5 2 hi 2019-12-05 08:30:40
这是我的源代码
<?php
require_once "config.php";
if (isset($_SESSION['userid'])) {
$to_id = $_SESSION['userid'];
}
if ($stmt = $con->prepare("SELECT * from pm where to_id=? or from_id=? ")) {
$stmt->bind_param('ss', $to_id, $from_id);
$stmt->execute();
}
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
?>
<?php echo $row['msg']; ?>
<?php
}
} else {
echo "NO MESSAGES";
}
?>
解决方案
我想出了这个解决方案,在 SQL 查询中完成所有这些对我来说太难了。这个解决方案真的不是最好的,但我能想出的最好的。
$sessionId = <session id variable>;
if ($stmt = $con->prepare("SELECT * FROM pm WHERE from_id = ? OR to_id = ? ORDER BY sent_date DESC")) {
$stmt->bind_param('ii', $sessionId, $sessionId);
$stmt->execute();
}
$tempArray = array();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
if (!in_array($row['to_id'].$row['from_id'], $tempArray)) {
echo "<br>";
echo $row['from_id']." - " . $row['to_id']." ". $row['msg']. " - " .$row['sent_date'];
}
array_push($tempArray, $row['from_id'].$row['to_id']);
array_push($tempArray, $row['to_id'].$row['from_id']);
}
} else {
echo "NO MESSAGES";
}
每个对话的最后一条消息的图像:
推荐阅读
- asp.net-core - .net 核心应用程序发布时的相对和绝对路径问题
- laravel - 如何用 Laravel elequoent 编写这个 SQL 查询
- typescript - 从使用 redux-toolkit 中的 createAsyncThunk 创建的另一个 thunk 调度 thunk
- javascript - 如何通过按住按钮增加js中的变量?
- laravel - Laravel 更深入的审核系统验证(用户可能会在连续登录 5 天后做出反应)
- php - 如何在wordpress中连接到外部数据库?
- laravel - .env 和 .env.example 文件在 Laravel 中会有所不同吗?
- css - 用 iframe 替换图像
- windows-subsystem-for-linux - ConEmu - 不同 Ubuntu 发行版的任务
- node.js - 403 不允许增加父母的数量 Google Drive API React Native