在 MySQL 中,我有一个表(针对这个问题进行了简化)
CREATE TABLE `projects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`priority` int(11) DEFAULT '1000000',
`status` enum('new','in_progress','complete') DEFAULT 'new',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
我想从按优先级排序的表中进行选择,但将状态为“完成”的行排在最后。
这有效:
SELECT * FROM projects
order by
case
when status='complete' then 999999
when status!='complete' then priority
end ASC
Run Code Online (Sandbox Code Playgroud)
但是将 999999 更改为 (select max(priority)+1 from projects) 会产生意想不到的结果,出现状态=完成的结果行第一页的一半。
此外,最后一种方法可能会导致重复计算相同的值。
做这个的最好方式是什么?