mysql - 按日期顺序对评论排序的问题

标签 mysql sql

我是 MySQL 新手,在对两个表进行排序时遇到问题。

此 SQL 是关于对书籍的最新评论进行排序的,但我将这些书籍按对它们的第一个评论排序,而不是按最新评论排序。

SELECT b.*, c.date_added as date FROM books b
        LEFT JOIN comments c ON (b.id = c.book_id)
        GROUP BY b.id
        ORDER BY date DESC 
        LIMIT 5

CREATE TABLE IF NOT EXISTS `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(255) COLLATE utf8_bin NOT NULL,
  `author` varchar(255) COLLATE utf8_bin NOT NULL,
  `pages` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `filename` varchar(255) COLLATE utf8_bin NOT NULL,
  `description` text COLLATE utf8_bin NOT NULL,
  `date_added` datetime NOT NULL,
  `publisher` varchar(255) COLLATE utf8_bin NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `times_sold` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_id` int(11) NOT NULL,
  `author` varchar(255) COLLATE utf8_bin NOT NULL,
  `email` varchar(255) COLLATE utf8_bin NOT NULL,
  `body` text COLLATE utf8_bin NOT NULL,
  `date_added` datetime NOT NULL,
  `approved` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

感谢您的宝贵时间。

最佳答案

这应该可行。您在 b.id 上指定组,但由于您对每本书都有多个评论,因此您需要 c.date_added 上的聚合函数。在这种情况下,您可以使用 MAX 显示最近的评论日期。

    SELECT b.*, MAX(c.date_added) as date FROM books b
    LEFT JOIN comments c ON (b.id = c.book_id)
    GROUP BY b.id
    ORDER BY MAX(c.date_added) DESC 
    LIMIT 5

关于mysql - 按日期顺序对评论排序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491160/

相关文章:

mysql - 如何使用 Laravel 访问 MariaDB 中的 json 属性?

mysql - SQL中如何通过id降序获取三个订单的平均温度?

sql - Google Sheet 查询 - 来自另一个查询的 WHERE 子句

sql - 在查询中两次使用相同的表别名

mysql - 删除列值的重复条件

mysql - 多表连接耗时过长

mysql - 从 node.js 返回多行

php - 用于选择多行的最佳 mysql 查询,每行都需要来自多个子表的多个关联行

sql - 自然连接——关系理论和 SQL

SQL Server 2008 - 如何将 GMT(UTC) 日期时间转换为本地日期时间?