我有一个内部站点论坛。一个非常简单的表,只有两个表:一个用于论坛帖子,另一个用于论坛内容。
我确实显示了所有帖子的列表,当用户单击每个项目时,它会转到包含所有评论的帖子。
论坛帖子按发布日期排序(按降序排列),但我想按更新日期排序,因此不仅新帖子而且新评论的帖子也显示在顶部.
这是两个表:
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/