MySQL:选择线程和帖子,按最新事件排序

标签 mysql sql database select join

<分区>

我想获取论坛主题列表,按最新事件排序:

  • 创建线程
  • 创建帖子

期望的输出:

Thread name  | Timestamp (Thread) | Timestamp (latest post)
-----------------------------------------------------------
Thread A     | 1                  | 10                 <- old thread, newest post (newer than newest thread)
Thread C     | 3                  | -                  <- newest thread, no post
Thread B     | 2                  | 5                 

编辑/可能的解决方案:

SELECT
    t.*,
    IFNULL
    (         
        (
            SELECT p.timestamp 
              FROM posts p 
             WHERE p.thread_id = t.id 
             ORDER BY p.timestamp DESC LIMIT 1
        ),
        t.timestamp
    ) AS sorting 
FROM 
    threads t
WHERE t.forum_id = 1
ORDER BY sorting DESC

有人有性能建议吗?谢谢大家!

最佳答案

SELECT t.*, IFNULL(MAX(p.`timestamp`), t.`timestamp`) AS pts FROM `threads` t, `posts` p WHERE p.`thread_id` = t.`id` AND t.`forum_id`=1 ORDER BY pts DESC

关于MySQL:选择线程和帖子,按最新事件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589737/

相关文章:

mysql - 向现有表添加新字段

php - 3 个表的内部连接给出重复的结果

sql - Sybase ASE 按级别等效连接

php - 向表中插入数据(mysqli insert)

node.js - 使用 Express 和 MongoDB 从多个单独的集合中获取数据

sql-server - 如何通过累积连接获取 SQL 中字符串值的分组

PHP MySQLi fetch "array push"覆盖数据

mySQL:从搜索结果中批量插入记录

mysql - LEFT JOIN 和 IS NULL 效果

sql - 在 Snowflake 中使用正则表达式过滤与句子/单词的完全匹配