Php 加入收件箱和发送框表

Php 加入收件箱和发送框表,php,mysql,Php,Mysql,我正在用PHP mysqli创建消息对话脚本。我有两个表收件箱和发送框,这两个表相同的列我想加入这两个表。我想得到两个用户之间的最后一条消息 收件箱表 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:1

我正在用PHP mysqli创建消息对话脚本。我有两个表收件箱和发送框,这两个表相同的列我想加入这两个表。我想得到两个用户之间的最后一条消息

收件箱表

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
岗亭桌

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

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 inbox 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();
}
这个怎么样

SELECT * from inbox i 
inner join sentbox s on i.from_id = s.to_id  
inner join users u on u.user_id = i.from_id
where i.from_id = 'your desired id here'
order by i.sent_date DESC limit 1;
我相信这将为您提供两个用户之间的最新通信

话虽如此,感觉最好采用更简单的设计,即每个通信都是一个事务,您将其存储在一个表中,其中包含FROM和to字段以及通信时间。这里不需要在两个表之间进行连接。你在这里复制数据

这个怎么样

SELECT * from inbox i 
inner join sentbox s on i.from_id = s.to_id  
inner join users u on u.user_id = i.from_id
where i.from_id = 'your desired id here'
order by i.sent_date DESC limit 1;
我相信这将为您提供两个用户之间的最新通信


话虽如此,感觉最好采用更简单的设计,即每个通信都是一个事务,您将其存储在一个表中,其中包含FROM和to字段以及通信时间。这里不需要在两个表之间进行连接。你在这里复制数据

我想加入两个表如果我不能删除邮件我该怎么做帮助我不确定我是否理解你上面的评论。我的建议(除非您对该数据模型有特殊需求)是将事务放在一个表中。我想加入两个表。如果没有,我无法删除消息,我该怎么做帮助meI我不确定我是否理解您上面的评论。我的建议(除非您特别需要此数据模型)是将事务放在一个表中。