2017-04-07 2 views
0

Ich habe eine Abfrage, die in der Gruppierung von der höchsten Ordnung in Ordnung funktioniert. Was ich realisiert habe, ist seine Lage, die ids in Ordnung, aber die Werte des vmsg Feld zu holen ist, entspricht nicht dem des id.Die Gruppenabfrage berücksichtigt keine entsprechenden Werte

Zum Beispiel ID von 28 entspricht mit einem vsmg 'Hallo', aber nachdem Sie die Abfrage ID 28 ausführen, wählt einen anderen Wert.

Dies ist, wie es aus dem Backend

enter image description here

und mit meinem Skript

SELECT 
    MAX(id) as id, vmsg, sender_id, fname, lname, profile_pix, profile.profile_id 
FROM 
    chats 
LEFT JOIN 
    profile 
ON 
    chats.sender_id = profile.profile_id 
WHERE 
    reciever_id = 1 
GROUP BY 
    (sender_id) 

ich aussieht:

enter image description here

ich die max bekommen ids aber der vmsg Werte stimmen nicht überein.

+0

Lieber, wenn Sie Gruppe gelten durch und Aggregatfunktion, wenn Sie Skalarfelds verwenden nicht Gruppe, die in von MySql die ersten nehmen. –

+1

Diese GROUP BY ist ungültig. Wird bei neueren MySQL-Versionen einen Fehler verursachen (außer im Kompatibilitätsmodus) oder unvorhersehbare Ergebnisse mit älteren Versionen zurückgeben. Die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer set-Funktion sein. – jarlh

+0

Anstatt 'MAX()' versuchen Sie 'ORDER BY' auf ID –

Antwort

1

Wenn Sie die Daten erhalten müssen, um die MAX(id) entspricht, können Sie Ihre Abfrage so etwas wie ändern:

SELECT 
    c.id, c.vmsg, c.sender_id, c.fname, c.lname, p.profile_pix, p.profile_id 
FROM 
    chats c 
LEFT JOIN 
    profile p 
ON 
    c.sender_id = p.profile_id 
WHERE 
    c.reciever_id = 1 
AND 
    c.id 
     IN (
      SELECT 
       MAX(c.id) as id 
      FROM 
       chats c 
      GROUP BY 
       c.sender_id 
     ) 

Dadurch werden nur die Daten abgerufen, die dem MAX(id) entsprechen.

+0

Dank für die Antwort, die ich hinzufügen möchte, zählen zu meiner Abfrage, aber es scheint, wenn ich es zähle nur ein Ergebnis herausbringen. kannst du es für mich überprüfen: SELECT COUNT (FALL WENN page = 'n' und reciever_id = 1 DANN 'geliebt' ELSE 'nicht geliebt' ENDE) AS love_answer, c.id, c.vmsg, c.sender_id, p.fname , p.lname, p.profile_pix, p.profile_id FROM Chats c LEFT Profil P ON c.sender_id JOIN = p.profile_id WHERE c.reciever_id = 1 und c.id in (SELECT MAX (c.id) als id Von Chats c GROUP BY c.sender_id) – user6579134

0

Meine Strategie: Sie werden alle raws über Chat, wo die ID für den gleichen id_sender_id und reciever_id das Maximum ist (also nicht die nächste Zeile für dieses Paar existiert)

diese

Versuchen:

SELECT id,vmsg,sender_id,fname,lname,profile_pix,profile.profile_id 
FROM chats c LEFT JOIN profile p 
on chats.sender_id = profile.profile_id 
WHERE NOT EXISTS 
    (SELECT 'NEXT' FROM chat c2 
    WHERE c2.id_sender_id = c.id_sender_id 
    AND c2.reciever_id = c.reciever_id 
    AND c2.id > c.id) 
AND reciever_id = 1 
Verwandte Themen