Mysql,具体ORDER BY

时间:2014-02-28 03:19:14

标签: php mysql

我有这样的表

CREATE TABLE IF NOT EXISTS `superTable` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `lotID` bigint(20) NOT NULL,
  `characterID` bigint(20) NOT NULL,
  `confirmChoice` varchar(255) DEFAULT NULL,
  `confirmStatus` varchar(255) DEFAULT NULL,
  `dateCreate` datetime DEFAULT NULL,
  `dateStart` datetime DEFAULT NULL,
  `dateEnd` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

我需要这样的订单

  1. confirmChoice为null的第一个条目。
  2. confirmChoice和dateStart不为空的下一个条目。
  3. 所有下一个按dateEnd排序;
  4. 我如何在一个查询中执行此操作?

1 个答案:

答案 0 :(得分:1)

如果我理解你的要求,这可能是实现它的一种方式:

SELECT
     *
    ,CASE
        WHEN (`confirmChoice` IS NULL) THEN '1'
        WHEN (`confirmChoice` IS NOT NULL AND `dateStart` IS NOT NULL ) THEN '2'
        ELSE '3'
     END AS sort_order
FROM
    `supertable`
WHERE
    1
ORDER BY
     sort_order
    ,`dateEnd`

您可能需要调整它以满足您的要求。