我有一个数据库,其中包含预先计算的质量分数从 0 到 10 的文章(10 是最好的质量),每篇文章都有一个发布日期。
这是一个示例数据库模式。
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`score` int(10) unsigned NOT NULL DEFAULT '0',
`published` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=357 DEFAULT CHARSET=latin1;
如何订购最新且得分最高的文章?
例如,以下内容不起作用,因为它将所有已评分的10
文章放在首位,即使它们很旧。最新评分的9
文章出现在所有10
s 之后。
SELECT * FROM posts ORDER BY score DESC, published DESC;
如果我先按发布排序,则分值无效,因为所有发布时间都是唯一的。
SELECT * FROM posts ORDER BY published DESC, score DESC;
我需要以某种方式对这些记录进行排序,以便得分较高的文章排在第一位,但它们在列表中的位置越靠前。
这是我制作的一些快速示例数据。
INSERT INTO `articles` (`title`, `content`, `score`, `published`) VALUES ('Test', 'Test', '10', '2013-07-09 21:25:43');
INSERT INTO `articles` (`title`, `content`, `score`, `published`) VALUES ('Test', 'Test', '5', '2013-07-08 13:34:12');
INSERT INTO `articles` (`title`, `content`, `score`, `published`) VALUES ('Test', 'Test', '10', '2013-07-07 20:17:02');
INSERT INTO `articles` (`title`, `content`, `score`, `published`) VALUES ('Test', 'Test', '9', '2013-02-12 10:32:11');
INSERT INTO `articles` (`title`, `content`, `score`, `published`) VALUES ('Test', 'Test', '10', '2006-01-01 01:05:13');
如果您在那个日期之前订购,SCORE DESC, published DESC
我会得到文章的日期2006-01-01
出现在文章评分之前,9
但它有更早的日期。
什么意思是这篇旧文章保留在网站的首页上,而得分9
的新文章同样值得在那里。