【问题标题】:join inbox and sent box table加入收件箱和发件箱表
【发布时间】:2019-12-16 03:17:25
【问题描述】:

我正在 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();
}

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这个呢?

    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;
    

    我相信这将为您提供 2 个用户之间的最新通信。

    话虽如此,但感觉最好采用更简单的设计,其中每次通信都是一个事务,并将其存储在一个表中,其中包含 FROM 和 TO 字段以及通信时间。此处无需在 2 个表之间进行 JOIN。你在这里复制数据。

    【讨论】:

    • 如果不是我想加入两个表我不能删除消息我该怎么做才能帮助我
    • 我不确定我是否理解您的上述评论。我的建议(除非您对此数据模型有特殊需求)是将事务放在一个表中。
    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多