2016-10-06 11 views
0

質問があります。チャットデータを取得し、受信者と送信者IDで並べ替えます。

私はこのようなデータベースを持っている:

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はとおしゃべりしています人々のIDがある:

は、私はこのような何かをしたいです。

は、あなたたちは、私が数年前にこのような問題を抱えていた:)

+0

つまり、ユーザー1はユーザー32&5 ...とチャットしていますか? –

+0

@DipanwitaKunduはい、それは正しいです – Refilon

答えて

1

おかげで値を持っていますが、

$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); 

は、今私は、次のGOT);私はすでに自分自身をそれを考え出しました

0

役立つことを願って。

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 
0

はこれを試してみてください:私はこれでした。。Auto-increment_fromまたはtoのいずれかを持っている必要があります(各フィールドを仮定し、受信した場合toフィールドに実際にそれをapreciate、すべての回答者のための

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

私はそれを更新しました。あなたのフィードバックをお知らせください。 –

+0

こんにちはDipanwita。あなたの努力に感謝します。しかし、私はすでにPHPで自分自身を考え出しました。もう一度ありがとう:) – Refilon

+0

いいえ、問題ありません。ありがとうございます。 –

関連する問題