我想知道是否有人可以帮助我。我正在建立一个私人消息中心,它将使用户能够通过前端将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中的用户标识对应于parent_id(回复形式的嵌套消息)和表2中的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添加到查询中,但是我有点迷失了。
如果您需要更多信息,请告诉我。第一次在这里寻求帮助,所以我不知道我是否提供了足够的信息:)
非常感谢您的关注和帮助!
答案 0 :(得分:3)
您可以使用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数组explode来分隔消息。
答案 1 :(得分: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;