2016-04-01 10 views
0

私は2つのテーブルchat_tableとmessage_tableを持っています。
私はチャットテーブル+メッセージとメッセージチートからの時間の行をcointains表示する必要があります。最後のテーブルが1または0に制限されている結合を作成する方法は?

CREATE VIEW chat_view AS 
SELECT 
    chat_table._id AS _id, 
    chat_table.chat_id AS chat_id, 
    chat_table.title AS title, 
    chat_table.title_lower AS title_lower, 
    chat_table.interlocutor_username AS interlocutor_username, 
    chat_table.interlocutor_lastname AS interlocutor_lastname, 
    chat_table.interlocutor_name AS interlocutor_name, 
    chat_table.interlocutor_username_lower AS interlocutor_username_lower, 
    chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower, 
    chat_table.interlocutor_photo AS interlocutor_photo, 
    chat_table.status AS status, 
    chat_table.type AS type, 
    chat_table.client_id AS client_id, 
    message_table.message AS message, 
    message_table.message_lower AS message_lower, 
    message_table.time AS time 
FROM 
    chat_table 
INNER JOIN 
    message_table 
ON 
    chat_table.chat_id = message_table.chat_id 
INNER JOIN 
    ( SELECT chat_id, 
    MAX(time) AS time FROM message_table GROUP BY chat_id) b 
ON 
    b.chat_id = message_table.chat_id AND message_table.time = b.time 

現在のところ、このステートメントは最後のメッセージとのチャットを表示し、メッセージなしでチャットを無視するビューを作成します。
メッセージなしでチャットを挿入すると暑いですか?左について

EDIT
あなたはLEFT JOINを使用しますが、あなたはそれを2回行う必要があり

CREATE VIEW chat_view5 AS SELECT chat_table._id AS _id, chat_table.chat_id AS chat_id, chat_table.title AS title, chat_table.title_lower AS title_lower, chat_table.interlocutor_username AS interlocutor_username, chat_table.interlocutor_lastname AS interlocutor_lastname, chat_table.interlocutor_name AS interlocutor_name, chat_table.interlocutor_username_lower AS interlocutor_username_lower, chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower, chat_table.interlocutor_photo AS interlocutor_photo, chat_table.status AS status, chat_table.type AS type, chat_table.client_id AS client_id, message_table.message AS message, message_table.message_lower AS message_lower, message_table.time AS time FROM chat_table LEFT JOIN message_table ON chat_table.chat_id = message_table.chat_id LEFT JOIN ( SELECT chat_id, MAX(time) AS time FROM message_table GROUP BY chat_id) b ON b.chat_id = message_table.chat_id AND message_table.time = b.time 

enter image description here

+1

LEFTで終わるINNER JOINがあれば、私が参加し、左使用whenewher、代わりに – jarlh

+0

@jarlhのJOINは、第一又は第二instedまたは両方をinsted - 私はチャット – Yarh

答えて

0

私は

CREATE VIEW chat_view AS SELECT chat_table._id AS _id, chat_table.photo AS photo, chat_table.interlocutor_id AS interlocutor_id, chat_table.chat_id AS view_chat_id, chat_table.title AS title, chat_table.title_lower AS title_lower, chat_table.interlocutor_username AS interlocutor_username, chat_table.interlocutor_lastname AS interlocutor_lastname, chat_table.interlocutor_name AS interlocutor_name, chat_table.interlocutor_username_lower AS interlocutor_username_lower, chat_table.interlocutor_lastname_lower AS interlocutor_lastname_lower, chat_table.interlocutor_photo AS interlocutor_photo, chat_table.status AS status, chat_table.type AS type, chat_table.client_id AS client_id, message_table.message AS message, message_table.message_lower AS message_lower, MAX (message_table.time) AS time FROM chat_table LEFT JOIN message_table ON chat_table.chat_id = message_table.chat_id GROUP BY chat_table.chat_id 
1

に参加:

FROM chat_table LEFT JOIN 
    message_table 
    ON chat_table.chat_id = message_table.chat_id LEFT JOIN 
    (SELECT chat_id, MAX(time) AS time 
     FROM message_table 
     GROUP BY chat_id 
    ) b 
    ON b.chat_id = message_table.chat_id AND message_table.time = b.time 

注ほとんどのデータベースがサポートしていることANSI標準ROW_NUMBER()関数、最新のメッセージを取得する簡単な方法を提供します。

+0

ごとにもっとして1行を取得し、私はインナーを交換しLEFT結合のJOINは、1チャットにつき1行以上を返します。編集された質問を見る – Yarh

関連する問題