2016-03-21 7 views
1

我々は二つのテーブル、スクリーンショットを添付しているは、どのように私は、MySQLは、最新の返信との会話を手配するために結合を使用してください

this image contains every single piece of message sent

このテーブルは以下のように命名され

this image contacts details of a every conversation started by a student to teacher

メッセージとして名付けられ、この表会話

生徒がメッセージを送信するたびに、会話テーブルはc上書きはconvoの一意のIDで存在し、sender_idという名前のデータベースにメッセージreceiver_idがユニークなIDとしてconvoという単一の生徒と教師の会話でユニークなconversation_idとして表示されます。

私たちがしたいことは、facebookのような会話を表示し、最新の会話が一番上になるようにすることです。私たちはcreated_atで最新のメッセージを見つけるつもりです。もちろん、学生は会話しか見ることができません彼は、そのための適切なMySQLのクエリを記述することができない、我々はここで立ち往生している、私たちを助けて、始めた私​​たちは、CodeIgniterのフレームワークを使用している私たちのバックエンドのために

これまでのところ、我々はこの思い付いた、しかし

を動作していないように思えます
$this->db->select('*'); 
$this->db->from($this->conversation_table_name); 
$this->db->join($this->message_table_name,'conversation.convo = messages.convo'); 
$this->db->where('conversation.student',$student_number); 
$query = $this->db->get(); 
+1

ordを設定する必要があるようです( "created_at"、 "desc"); 'これは、メッセージを作成した時間順に並べ替えます。最新のものを使用します。 – gabe3886

+0

はい、オーダーを設定する必要があります(created_atまたはidフィールドによって)をDESCの順序で返します。また、私は私の結合フィールドとしてvarcharを使用するか分からない。 – cfnerd

答えて

0
$this->db->select('*'); 
$this->db->from($this->conversation_table_name); 
$this->db->join($this->message_table_name,'conversation.convo = messages.convo'); 
$this->db->where('conversation.student',$student_number); 
$this->db->group_by("conversation.sender_id"); 
$this->db->order_by("messages.created_at", "desc"); 
$query = $this->db->get(); 
+0

こんにちは、このソリューションは働いています、私はテーブル教師から教師の名前を得ることができますか?単純な列はteachers.teacher_nameのようなものです、それはユニークなteacher_idを持っています – runningmark

+0

最初にメッセージテーブルにteacher_idを追加します。そしてwhere条件の前に$ this-> db-> join($ this-> teachers_table_name、 'messages.teacher_id' = 'teachers.teacher_id')を追加します。 –

関連する問題