我在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_titles
和post_contents
可以是1个posts (id)
的多个条目。
我需要的是选择具有最新日期时间的标题。我必须使用posts (id)
来选择所有内容。我怎么能这样做?
编辑:我需要一起选择最新的标题和最新内容或最新的标题,最新的内容和最新的状态。
答案 0 :(得分:4)
按您感兴趣的列(在这种情况下为datetime)排序并执行限制1.这将按日期时间降序排序行(最新的将是第一个)。然后将1限制为刚刚获得第一行。
SELECT * FROM post_titles ORDER BY datetime DESC LIMIT 1;
答案 1 :(得分: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);
我假设所有日期时间都相等,因为当您在表格上添加内容时,内容会同时创建。
编辑:现在日期时间是否相等并不重要。检查它是否有效。
答案 2 :(得分:0)
以Mark S的答案为基础(我无法弄清楚如何引用或链接到他的答案......)
由于datetime
和post_title
表中都有post_contents
个字段,因此您必须在排序时指定要引用的表的列,如下所示:
SELECT `title`, `content`
FROM `post_titles` t
JOIN `post_contents` c USING (`post_id`)
ORDER BY t.datetime DESC
LIMIT 1