2016-04-01 5 views
0

Ich habe 2 Tabellen: chat_table und message_table.
Ich möchte sehen, welche Zeilen countains von Chat-Tabelle + Nachricht und Zeit von message_table falls vorhanden.Wie mache ich einen Join, wo die letzte Tabelle auf 1 oder 0 begrenzt ist?

Derzeit erstellt diese Anweisung eine Ansicht, die den Chat mit der letzten Nachricht anzeigt und Chats ohne Nachrichten ignoriert.
Hot, um Chats ohne Nachrichten einzuschließen?

EDIT
Über LEFT JOIN

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 JOIN statt, wenn INNER JOIN, – jarlh

+0

@jarlh whenewher i linken Seite kommen, insted ersten oder zweiten oder insted beide - ich mehr bekommen dann 1 Zeile pro Chat – Yarh

Antwort

0

ich am Ende mit

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

Sie LEFT JOIN verwenden würde, aber Sie müssen es zweimal tun:

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 

Beachten Sie, dass die meisten Datenbanken die Unterstützung ANSI-Standard ROW_NUMBER() Funktion, Dies bietet eine einfachere Methode zum Abrufen der neuesten Nachricht.

+0

I Inner ersetzt JOIN mit LEFT Join, aber es gibt mehr als 1 Zeile pro Chat zurück. Siehe editierte Frage – Yarh

Verwandte Themen