获取聊天数据并按接收者和发送者id排序

bjp0bcyl  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(283)

我有个问题。
我有这样一个数据库:

messages_id | int | Auto-increment
from | int
to | int
message | text

现在,我在按发件人id对它们进行分组时遇到问题。我只想检索由登录的用户发送或接收的消息。这并不难。 SELECT * FROM messages WHERE from = 1 OR to = 1 ORDER BY messages_id ASC 但现在,他们没有分组。因为不同的人可以给这个用户发信息。我真的不知道从哪里开始。
我想要这样的东西:

array(
    [5] => array(
        [0] => "message One",
        [1] => "Message two"
    ),
    [32] => array(
        [0] => "message One",
        [1] => "Message two"
    )
);

5号和32号是聊天对象的身份证。
希望你们能帮忙:)

uurv41yg

uurv41yg1#

谢谢你的回复。真的很感激,但我自己已经弄明白了;)
现在我得到了以下信息:

$currentUserID = get_current_user_id();
$rows = $wpdb->get_results("SELECT * FROM `messages` WHERE `from` = '" . $currentUserID . "' OR `to` = '" . currentUserID . "' ORDER BY `messages_id` ASC");

$messages = [];

foreach($rows as $row) {
    if($row->from == $currentUserID) {
        $messages[$row->to][] .= $row->message;
    }
    else {
        $messages[$row->from][] .= $row->message;
    }
}
print_r($messages);
xtfmy6hx

xtfmy6hx2#

试试这个:(假设每个字段必须有 Auto-increment_from 或者 to . 对于收到的案件 to 字段有值

SELECT *, if(`Auto-increment_from` = 1 , 'From' , 'From') as meaage_type 
FROM messages WHERE from = 1 OR to = 1 ORDER BY messages_id ASC
eqqqjvef

eqqqjvef3#

几年前我遇到过这样的问题。我做到了:

select 'In' as MessageDirection, `From` as Contact, `To` as UserId, Message 
from Messages
where `To` = 1
union
select 'Out' as MessageDirection, `To` as Contact, `From` as UserId, Message 
from Messages
where `From` = 1
order by Contact

相关问题