【问题标题】:Group all from and to messages per user对每个用户的所有消息进行分组
【发布时间】:2015-02-27 13:33:42
【问题描述】:

我想知道是否有人可以帮助我。我正在开发一个私人消息中心,这将使用户能够通过前端相互发送 PM。收件箱工作得很好,但是我想添加一个页面,您可以在其中单击用户名,然后您可以查看与该用户和当前登录用户发送和接收的所有消息。

例如:

用户 1
留言A
留言B
消息 C
消息 D

用户 2
留言A
留言B
消息 C

用户 3
留言A
留言B
消息 C
消息 D
消息 E

在我的数据库中,我有一个包含所有用户的表:

id | user_login | user_pass | user_nicename | user_email | user_url | user_registered | user_activation_key

我有一张包含消息信息的表格:

id | parent_id | from_user | to_user | send_date | last_date | message_title | message_contents | status | to_del | from_del

表 1 中的用户 id 对应于表 2 中的 parent_id(以回复形式嵌套的消息)和 from_user 和 to_user。

使用下一个查询(我在 Stackoverflow 上找到基础后使用),我能够回显 from_user 列的结果,但是我想回显从用户发送和发送给用户的所有消息:

global $wpdb;
$result = $wpdb->get_results( "SELECT table1.id, table1.user_nicename, table2.id,
table2.from_user, table2.message_title FROM table1 
INNER JOIN table2 ON table1.id=table2.from_user 
GROUP BY user_nicename"  ); 

foreach($result as $row)
{
echo $row->user_nicename." <br>  ".$row->message_title."<br>";
}
?>

谁能解释一下并指出我正确的方向?我想我需要使用像 INNER JOIN 这样的东西来将 to_user 添加到查询中,但是我有点迷失了。

如果您需要更多信息,请告诉我。第一次在这里寻求帮助,所以我不知道我是否提供了足够的信息:)

非常感谢您的关注和帮助!

【问题讨论】:

    标签: mysql sql select join inner-join


    【解决方案1】:

    试试这个:

    SELECT t1.id, t1.user_nicename, t2.id, t2.from_user, t2.message_title 
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.id IN (t2.from_user, t2.to_user)
    ORDER BY t1.id;
    

    如果您想要特定用户的消息,请使用以下查询:

    SELECT t1.id, t1.user_nicename, t2.id, t2.from_user, t2.message_title 
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.id IN (t2.from_user, t2.to_user)
    WHERE t1.id = 1;
    

    【讨论】:

    • 非常感谢!那是有效的!在接下来的几天里,我会稍微摆弄一下,看看我是否可以在页面中进一步实现它。我实际上是在尝试对用户进行概述,当您单击用户名时,您将获得登录用户和他/她单击的用户之间的所有消息的概述。哦,新年快乐! :D
    • 嗨,Saharsh,我一直在摆弄你的代码。它正在工作,但是我仍然在努力以我想要的方式获得结果的结果:) 当我使用您的代码然后执行我在上面的代码中提到的 foreach{} 时,我得到了每个消息标题 a 用户名(所以用户名 + 消息标题、用户名 + 消息标题等)而不是:用户名和属于该消息的所有消息(如:用户名 + 消息标题 + 消息标题 + 消息标题等。知道如何我能做到吗?非常感谢您!
    【解决方案2】:

    您可以使用 group_concat 函数来执行此操作。

    Select table1.id, table1.user_nicename, 
           group_concat(table2.message_title SEPARATOR "|") as Message
    FROM table1 
    LEFT JOIN table2 
    ON table1.id=table2.parent_id 
    GROUP BY table2.parent_id
    

    您将收到由 | 连接的不同消息 使用 PHP 数组爆炸来分隔消息。

    【讨论】:

    • 非常感谢您的快速回复!我还没有让它工作,但你的建议是有道理的:)这些天我要摆弄它!顺便说一句,新年快乐!
    • 谢谢!!也祝你新年快乐!!
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 2018-08-12
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多