0

たとえば、topicID が 88 である最新の投稿のユーザー名とタイムスタンプを取得しようとしています。

ユーザー

id      |  username    
--------|----------
45234   | kaka   
32663   | lenny  
52366   | bob  

投稿

id      |  message  | topicID | timestamp | userID
--------|-----------|---------|-----------|-------
675     | hello     | 88      | 100       | 32663
676     | hey       | 88      | 200       | 45234
677     | howdy     | 88      | 300       | 52366

ここでは、postID 677 とユーザー bob が必要です。

単一の SQL クエリでこれを行うことはできますか?

これを実装できれば素晴らしいでしょう:

SELECT topics.id, topics.subject, topics.forum_id
FROM topics WHERE topics.forumID = 16
4

2 に答える 2

1

テストされていませんが、頭の中で、次のクエリで必要なものが得られると思います。

SELECT Users.username, Posts.timestamp
FROM Users JOIN Posts on Users.id = Posts.userID
WHERE Posts.topicID = 88
ORDER BY Posts.timestamp DESC
LIMIT 1
于 2013-06-27T01:08:14.760 に答える
1

テーブルがテーブルによってTopicリンクされており、それに関連付けられている最新のものを取得したい場合、基本的にそれぞれの最新のものを取得するサブクエリを作成し(自動インクリメント列として設定されていると仮定)、テーブルの結果を結合して取得します他の列。また、エントリを投稿したユーザーの名前を取得するには、テーブルに参加する必要があります。PostTopic.ID = Post.TopicIDpostidtopicIDPostUser

SELECT  a.id, 
        a.subject, 
        a.forumid,
        b.message,
        b.timestamp,
        d.username
FROM    topic a
        INNER JOIN Posts b
            ON a.id = b.topicID 
        INNER JOIN
        (
            SELECT  topicID, MAX(id) id
            FROM    Posts
            GROUP   BY topicID
        ) c ON b.topicID = c.topicID AND
                b.id = c.ID
        INNER JOIN users d
            ON b.userID = d.id
WHERE   a.forumID = 16

句を削除するWHEREと、それぞれの最新のエントリがすべて取得されますforumID

于 2013-06-27T01:08:35.173 に答える