2017-04-07 10 views
0

最高の順序でグループ化するのに問題のないクエリがあります。私が気づいたのは、idsを手に入れることができるが、vmsgフィールドの値はidの値に対応していない。グループクエリは対応する値を評価しません

たとえば、idが28の場合、vsmg 'hello'に対応しますが、クエリIDを実行した後は、28という別の値が選択されます。私は最大idsを得る

enter image description here

これは私がこれを取得することは、バックエンド

enter image description here

と私のスクリプト

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) 

でからどのように見えるかですしかしvmsgの値は対応していません。

+0

グループに適用して集計関数を使用すると、グループに存在しないスカラーフィールドをMySqlで使用すると、最初のものが使用されます。 –

+1

GROUP BYは無効です。互換性モードでない限り、新しいMySQLバージョンでエラーが発生するか、古いバージョンでは予期しない結果が返されます。 GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – jarlh

+0

答えは「MAX()」ではなく、 –

答えて

1

あなたはMAX(id)に対応するデータを取得する必要がある場合は、あなたのようなクエリの何かを変更することができます。

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 
     ) 

MAX(id)に対応するデータのみを取得します。

+0

に「ORDER BY」を使ってみてください。私の質問にカウントを追加したいのですが、1つの結果しか出ないと思うようです。あなたは私のためにそれをチェックすることができます:SELECT COUNT(CASEの場合はページ= 'n'とreciever_id = 1 THENは愛していない 'ELSE'は愛されていません)AS love_answer、c.id、c.vmsg、c.sender_id、p.fname 、p.lname、p.profile_pix、p.profile_id FROMチャットc LEFT JOINプロファイルp ON c.sender_id = p.profile_id ここでc.reciever_id = 1 AND c.id in(SELECT MAX(c.id)in id FROMチャットc GROUP BY c.sender_id) – user6579134

0

私の戦略:同じid_sender_idreciever_idのIDが最大(そう、このカップルのための次の行が存在しません)

これを試してみてくださいがどこにあるかあなたはチャットについてのすべてのRAWを取得します:

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 
関連する問題