小编sdj*_*uan的帖子

MySQL order by - 一列以另一列为条件

在 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) 会产生意想不到的结果,出现状态=完成的结果行第一页的一半。

此外,最后一种方法可能会导致重复计算相同的值。

做这个的最好方式是什么?

mysql order-by

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

mysql ×1

order-by ×1