2016-10-24 27 views
3

私は、MySQLとPHPをよりよく理解するために、非常に基本的な投稿と返信システムを作成しています。私は2つのテーブルを持っています:投稿とコメント。テーブルBの値に基づいてテーブルAの値を選択しますか?

posts(post_id, post_user, timestamp, post_text) 
comments(comment_id, post_id, timestamp, comment_text) 

私がやってみたいのは、最新の返信があるものを並べ替えることです。元の投稿のタイムスタンプではなく、最新のコメントで注文したいので、SELECT * from posts ordered by comments.timestamp descにする必要があります。私は動作する適切なクエリを把握することはできません。

+0

を探しても、なぜあなたはタイムスタンプを使用したくありませんか? – YLS

+0

サンプルデータと期待される出力を提供すると役に立ちます –

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-私にとって非常にシンプルなSQLクエリー – Strawberry

答えて

0

あなただけあなたがこれを行うことができ、タイムスタンプによって、この

SELECT p.* 
FROM posts p 
INNER JOIN comments c ON c.post_id= p.post_id 
ORDER BY c.timestamp desc 
+0

投票をなぜ票を落とすのか気をつけてください。 –

+0

私はなぜdownvotesがわからないが、これは近いが、右ではない。同じ元の投稿を複数回表示し、投稿テーブルのすべての投稿を表示しません。それは最新のコメントが上にあると同時に投稿に更新されます。 – FreeBird85x

-1
SELECT A.Post_Id FROM 
(SELECT P.Post_Id,C.TimeStamp,ROW_NUMBER() OVER(PARTITION BY S.Post_Id ORDER BY C.TimeStamp DESC) Rnk FROM POSTS p INNER JOIN COMMENTS C 
ON P.Post_Id=C.Post_Id) A 
WHERE A.Rnk=1 
ORDER BY A.TimeStamp DESC 
This is SQL SERVER version. 
So hope you can find Mysql version for it 
+0

"MySQLの理解を深めるために..." – Strawberry

0
SELECT post_id, post_user, timestamp, post_text, 
     most_recent_comment 
    FROM posts NATURAL JOIN 
     (SELECT post_id, 
       MAX(timestamp) AS most_recent_comment 
      FROM comments 
     GROUP 
      BY post_id) AS t 
UNION 
SELECT post_id, post_user, timestamp, post_text, 
     NULL AS most_recent_comment 
    FROM posts 
WHERE post_id NOT IN (SELECT post_id FROM comments); 
関連する問題