【问题标题】:How to show last commented post in mysql where are two tables involved? (post and comments)如何在mysql中显示最后评论的帖子涉及两个表? (帖子和评论)
【发布时间】:2017-04-14 17:06:04
【问题描述】:

我有一个内部网站论坛。一个非常简单的表格,只有两个表格:一个用于论坛帖子,另一个用于论坛内容。

我确实显示了所有帖子的列表,当用户点击每个项目时,它会转到包含所有 cmets 的帖子。

论坛帖子按发布日期排序(按降序排列),但我想按更新日期排序,所以不仅新帖子而且新评论的帖子也会出现在顶部.

这是两张表:

CREATE TABLE foro (
    foroID int unsigned not null auto_increment primary key,
    userID int(11) NOT NULL,
    estado char(7) NOT null DEFAULT 'abierto',
    asunto char(200) NULL,
    fecha char(25) NULL,
    deprecated_userID int(11) NULL,
    deprecated_nodeID int(11) NULL,
    texto text null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE foroComentarios (
    comentarioID int unsigned not null auto_increment primary key,
    foroID int(11) NOT NULL,
    userID int(11) NOT NULL,
    fecha char(25) NULL,
    deprecated_userID int(11) NULL,
    deprecated_nodeID int(11) NULL,
    texto text null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是我现在展示论坛帖子的方式:

    SELECT  foro.foroID, 
            foro.userID AS userid, 
            foro.asunto, 
            foro.estado, 
            foro.fecha,
            usuarios.userID, usuarios.docFoto,
            usuarios.userApellido, usuarios.userNombres
    FROM foro JOIN usuarios
    ON foro.userID = usuarios.userID
    ORDER BY foro.fecha DESC

我认为我应该为此使用子查询,但我尝试了几种方法,唯一得到的是重复帖子的列表。 有没有办法在不修改表格结构的情况下实现这一点?

【问题讨论】:

  • 感谢您的评论。我认为提供一个关于我正在做的事情的查询示例就足以作为“最小、完整和可验证示例 (MCVE)”?
  • 所以,现在你知道了。

标签: mysql join subquery


【解决方案1】:

尝试为我的问题创建适当的 MCVE,我找到了解决方案 :)

所以,万一有一天它对某人有所帮助,这对我有用:

    SELECT DISTINCT foro.foroID, 
            foro.userID AS userid, 
            foro.asunto, 
            foro.estado, 
            usuarios.userID, usuarios.docFoto,
            usuarios.userApellido, usuarios.userNombres,
            foro.fecha AS fechaP,
            foroComentarios.fecha AS fechaC,
            IFNULL(GROUP_CONCAT(
                    foroComentarios.fecha 
                    ORDER BY foroComentarios.fecha 
                    DESC 
                    SEPARATOR ','),
                    foro.fecha) fechaX
    FROM foro JOIN usuarios
    ON foro.userID = usuarios.userID
    LEFT JOIN foroComentarios
    ON foro.foroID = foroComentarios.foroID
    GROUP BY foro.foroID
    ORDER BY fechaX DESC

之后我只取 fechaX 字段(将其分解以获得最新的 unix 时间编号),并使用它对列表进行排序。

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2017-02-11
    • 1970-01-01
    • 2011-06-30
    • 2013-05-13
    相关资源
    最近更新 更多