0

mysql に次の 2 つのテーブルがあります。

posts (id)
post_titles (id, post_id, title, datetime, user_id)
post_contents (id, post_id, content, datetime, user_id)
post_statuses (id, post_id, status, datetime, user_id)

posts (id) == posts_titles (post_id)

post_titlesand には、post_contents1 に対して複数のエントリを指定できますposts (id)

私が必要とするのは、最新の日時を持つタイトルを選択することです。を使用してすべてを選択する必要がありますposts (id)。どうすればそれができますか?

編集: 最新のタイトルと最新のコンテンツを一緒に選択するか、最新のタイトル、最新のコンテンツ、最新のステータスを選択する必要があります。

4

3 に答える 3

4

関心のある列 (この場合は日時) で並べ替え、制限を 1 にします。そして、最初の行だけを取得するように 1 を制限します。

SELECT * FROM post_titles ORDER BY datetime DESC LIMIT 1;
于 2013-09-10T16:33:44.430 に答える
1

これを試して:

SELECT t.title, c.content
FROM post_titles t 
JOIN post_contents c ON t.post_id = c.post_id
WHERE 
t.datetime = 
    (SELECT MAX(x.datetime) FROM post_titles x WHERE t.post_id = x.post_id)
AND 
c.datetime = 
    (SELECT MAX(y.datetime) FROM post_contents y WHERE c.post_id = y.post_id);

テーブルに何かを追加すると、コンテンツが同時に作成されるため、すべての日時が等しいと想定しています。

編集:日時が等しいかどうかは問題ではありません。動作するかどうかを確認してください。

于 2013-09-10T17:52:02.100 に答える
0

Mark Sからの回答を基に構築するには(彼の回答を引用またはリンクする方法がわかりません...)

とテーブルのdatetime両方にフィー​​ルドがあるため、次のように、順序付けを行うときに参照するテーブルの列を指定する必要があります。post_titlepost_contents

SELECT `title`, `content`
FROM `post_titles` t
    JOIN `post_contents` c USING (`post_id`)
ORDER BY t.datetime DESC
LIMIT 1
于 2013-09-10T16:54:09.037 に答える