2

受信トレイに最新の5つのメッセージを表示したい。5つの最新のIDを取得するには、これを使用する必要があります。

SELECT
    MAX(id)
FROM 
    samtaler
WHERE 
    brukerid_mottaker = 1 
GROUP BY brukerid_avsender
ORDER BY id DESC
LIMIT 5

これにより、必要な正しいIDが返されます。しかし、同じクエリで、同じテーブルからデータを選択したいのですが、上記のクエリから返されたIDを取得した行です。

私はいくつかのこと、変数、自己参加を試しましたが、運がありません:

select 
    p2.title, 
    p2.message,
    @a:=max(p1.id)
from 
    samtaler p1
    join samtaler p2
    on (@a = p2.id)
where
    p2.brukerid_mottaker = 1 
group by p2.brukerid_avsender
order by p2.id DESC
limit 5

なぜこれが機能しないのですか?

これはデータベース内の現在のデータ です。この場合は、13行目と4行目を返します。英語がおかしいのでごめんなさい。

4

1 に答える 1

1

単純な自己結合ではなく、サブクエリに対して結合します。。内では使用できないIN()ため、句は機能しません。ただし、結合されたサブクエリでは機能するはずです。LIMITIN()

SELECT
  p1.title,
  p1.message,
  p2.id
FROM 
  samtaler p1
  JOIN (
    SELECT MAX(id) AS id
    FROM 
        samtaler
    WHERE 
        brukerid_mottaker = 1 
    GROUP BY brukerid_avsender
    ORDER BY id DESC
    LIMIT 5
  ) p2 ON p1.id = p2.id

この方法では、変数は必要ありません。

于 2012-06-22T18:19:38.347 に答える