2017-09-25 3 views
0

ich diese AbfrageNull-Werte sql in mysql verbinden

SELECT m.chat_id, m.msg_sender_id, m.message, m.id, 
     DATE_FORMAT(m.created_at, '%Y-%m-%d %H:%i:%s') as created_at, 
     g.id as group_id, g.name as group_name, g.image as group_image 
FROM message as m 
INNER JOIN chat as c ON c.id = m.chat_id 
LEFT OUTER JOIN group as g ON c.group_id = g.id 
WHERE c.id = 434 
ORDER BY m.id ASC 

Was will ich erreichen tue, ist alle Mitteilungen im Chat zu bekommen, und wenn es eine Gruppe im Chat beteiligt ist Gruppe zurückzukehren. Die Gruppe ist an das Chat-Objekt angehängt (nicht an das Nachrichtenobjekt). Ich bekomme group in allen Zeilen aus irgendeinem Grund.

Können Sie beraten, wie kann ich das erreichen?

============= EDIT ==============

group Tabellenstruktur sieht wie folgt aus:

`id` int(11) NOT NULL AUTO_INCREMENT, 
    `created_at` datetime(6) NOT NULL, 
    `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
    `image` longtext COLLATE utf8_bin, 
    `status` int(11) DEFAULT NULL, 
    `creator_id` int(11) NOT NULL 

chat Tabellenstruktur wie diese Tabelle sieht wie folgt aus

`id` int(11) NOT NULL AUTO_INCREMENT, 
    `created_at` datetime(6) NOT NULL, 
    `group_id` int(11) DEFAULT NULL, 
    `person1_id` int(11) NOT NULL, 
    `invitation_id` int(11) NOT NULL, 

message sieht

`id` int(11) NOT NULL AUTO_INCREMENT, 
    `message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, 
    `created_at` datetime(6) NOT NULL, 
    `chat_id` int(11) NOT NULL, 
    `msg_sender_id` int(11) NOT NULL, 

Dies ist das Ergebnis aus einer Abfrage

434 14 Some text 900 2017-09-10 09:48:56 3 My group 1 image.jpg 
434 13 Some text 2 901 2017-09-10 09:48:59 3 My group 1 image.jpg 
434 14 Some text 3 935 2017-09-16 15:37:07 3 My group 1 image.jpg 
434 14 Some text 4 968 2017-09-21 06:52:56 3 My group 1 image.jpg 
+1

Ich verstehe das Problem nicht wirklich. Ihre Anfrage scheint in Ordnung, aber Sie erhalten mehr Ergebnisse von 'group_group' als erwartet? Bitte fügen Sie einige Beispieldaten hinzu. – HoneyBadger

+0

Hier gibt es keine Gruppe. – Strawberry

+0

Wahrscheinlich haben Sie die ID = 434 in allen drei Tabellen einschließlich der Gruppe, daher erhalten Sie groupName für alle Zeilen. –

Antwort

1

Dieses für einen Kommentar ist zu lang.

Ihre Anfrage ist korrekt wie geschrieben. Sie haben eine für chat und messages. Sie haben eine left outer join für group.

Ich denke, Sie können die Ergebnismenge falsch interpretieren. Die Ergebnismenge ist eine Tabelle mit alle Spalten für jede Zeile. Sie erhalten keine Spalten für Nachrichten und dann andere Spalten für Chats. So funktioniert SQL.

Alternativ können Ihre Abfragen Bestellungen per m.id. Vielleicht bringt diese Reihenfolge alle Nachrichten mit Gruppen an die Spitze.

+0

Danke, es war mein Strukturierungsfehler. Es zeigt die Gruppe in allen Zeilen an, da alle Chats Gruppen angehängt haben. – bla0009