0

我在mysql中有这两个表:

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_titlesandpost_contents中 1 可以是多个条目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 回答