mysql - 从 MySql 中的两个字段任意排序

标签 mysql

我有一个困难的事情要做。我需要能够以任意方式对查询结果进行排序。

这是架构:

CREATE  TABLE `Wines` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Vinyard` VARCHAR(45) NULL ,
  `Quality` VARCHAR(45) NULL ,
  `Sell_By` DATE NULL ,
  PRIMARY KEY (`ID`) );


INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Draper', 'High', '2012-03-22');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Draper', 'Medium', '2014-07-16');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Draper', 'Medium', '2012-01-01');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Becks', 'High', '2014-07-16');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Becks', 'Ultra', '2013-02-02');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Stevens', 'Crap', '2014-08-16');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Stevens', 'Medium', '2014-01-01');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Stevens', 'Low', '2013-09-13');
INSERT INTO `Wines` (`Vinyard`, `Quality`, `Sell_By`) VALUES ('Miller', 'Low', '2014-01-01');

现在我知道我可以获得一种简单的质量排序(不是按字母顺序排列的),如下所示:

 SELECT *,
CASE Quality
WHEN 'Ultra' THEN 1
WHEN 'High' THEN 2
WHEN 'Medium' THEN 3
WHEN 'Low' THEN 4
WHEN 'Crap' THEN 5
ELSE 6
END AS myORDER
FROM Wines
ORDER BY myOrder

这给了我

ID  Vinyard Quality Sell_By myORDER
5   Becks   Ultra   2013-02-02  1
1   Draper  High    2012-03-22  2
4   Becks   High    2014-07-16  2
2   Draper  Medium  2014-07-16  3
3   Draper  Medium  2012-01-01  3
7   Stevens Medium  2014-01-01  3
8   Stevens Low 2013-09-13  4
9   Miller  Low 2014-01-01  4
6   Stevens Crap    2014-08-16  5

好的,到目前为止一切顺利。现在是皱纹。

我需要移动中等质量的 Wine 并且只有中等质量的 Wine ,其销售截止日期已过期。所以结果会是

ID  Vinyard Quality Sell_By
5   Becks   Ultra   2013-02-02
1   Draper  High    2012-03-22
4   Becks   High    2014-07-16
2   Draper  Medium  2014-07-16
7   Stevens Medium  2014-01-01
8   Stevens Low 2013-09-13
9   Miller  Low 2014-01-01
6   Stevens Crap    2014-08-16
3   Draper  Medium  2012-01-01  <--Notice this one moved

我该怎么做?

最佳答案

ORDER BY Quality = 'Medium' AND Sell_By < CURDATE(), myOrder

这将按两个条件排序。

关于mysql - 从 MySql 中的两个字段任意排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721658/

相关文章:

mysql - mysql有返回带序数后缀的数字的函数吗?

mysql - 选择最大 native 查询 hibernate

MySQL - AND 条件

mysql - 如何设计一个将多列合并为一列的数据库?

php - Laravel数据库插入错误

php - 如何从页面上的mysql和echo链接获取数据?

c# - MySQL C#,日期时间列的最后 x 分钟

MySQL:在一个查询中获取不同表中的值?

c# - 根据数据库中的值隐藏/显示按钮

mysql - 使用 DBD::mysql 时需要有关 perl 错误的帮助