2

あなたがチャットしている人のリストを表示するページがあります。現在、チャットしている相手と最も古いメッセージが表示されています。ただし、最新のメッセージが表示されるはずです。これはクエリです:

SELECT * FROM post
WHERE fk_user_to = '$userid'
GROUP BY fk_user_from
ORDER BY datotime DESC

とテーブル構造

post_id || fk_user_to || fk_user_from || message || datotime
4

3 に答える 3

2

これはうまくいきました:

    SELECT * FROM
    (SELECT * FROM post ORDER BY datotime DESC) as inv
    WHERE fk_user_to = '$userid'
    GROUP BY fk_user_from
    ORDER BY datotime DESC
于 2012-07-29T22:55:01.763 に答える
0

それは実際にはそのようには機能しません。GROUP BYがどの行を選択するかを確認することはできないため、その行にORDER BYを設定すると、予測できない出力が発生します。また、GROUPBYの前に注文することはできません。

これを試して:

SELECT *,MAX(datotime) AS dt fk_user_from
FROM post
WHERE fk_user_to = '$userid'
GROUP BY fk_user_from
ORDER BY dt
于 2012-07-29T22:21:49.713 に答える
0

単純なSQLでは簡単な解決策はないと思います。データベースシステムでサブクエリが許可されている場合は、次のようなサブクエリを実行する必要があります。

SELECT fk_user_from AS id, MAX(dateotime) AS newest_timestamp FROM post WHERE fk_user_to = '$userid'

post次に、2つのフィールドをキーとして再度選択します。

MySQLでは、次のようになります。

SELECT * FROM post P1 
JOIN (
    SELECT fk_user_from, MAX(dateotime) AS newest_dateotime 
    FROM post 
    WHERE fk_user_to = '$userid'
    GROUP BY fk_user_from
) AS P2
ON  P1.fk_user_from=P2.fk_user_from
AND P1.datotime    =P2.newest_dateotime
WHERE P1.fk_user_to = '$userid'
于 2012-07-29T22:30:01.333 に答える