mysql - 如何显示mysql中最后评论的帖子涉及两个表? (帖子和评论)

标签 mysql join subquery

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

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

论坛帖子按发布日期排序(按降序排列),但我想按更新日期排序,因此不仅新帖子而且新评论的帖子也显示在顶部.

这是两个表:

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,我找到了解决方案:)

所以,以防万一它有一天能帮助别人,这就是它对我有用的:

    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 时间编号),并使用它来对列表进行排序。

关于mysql - 如何显示mysql中最后评论的帖子涉及两个表? (帖子和评论),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415997/

相关文章:

php - AJAX 长轮询不起作用

mysql - 如何删除 MySQL 中的重音符号?

php - 如何从 MySQL 中选择 24 小时内列的总和范围?

mysql - 使用复杂查询的排名系统: more precise filters

sql - MySQL 子查询返回不正确的结果?

php - 无法通过php文件将数据插入MySQL

PHP 无法正确显示某些 UTF-8 字符

java - 具有急切加载问题的 Hibernate 多对多

MySQL 加入更新

sql - T-SQL 子查询最大(日期)和连接