Mysql 文本和日期在同一个表中。按顺序排列,使文本始终位于底部

Mysql 文本和日期在同一个表中。按顺序排列,使文本始终位于底部,mysql,syntax,Mysql,Syntax,我有一个带有日期的表,在同一个表中我还有文本条目。例如: 2014-11-02 2014-11-01 Not done 2014-10-05 Not done Not done 如果我运行SELECT*FROM table ORDER BY dates,那么我将得到 2014-10-05 2014-11-01 2014-11-02 Not done Not done Not done 这是完美的。但当我使用desc反转此查询时,我得到: Not done Not done Not done

我有一个带有日期的表,在同一个表中我还有文本条目。例如:

2014-11-02
2014-11-01
Not done
2014-10-05
Not done
Not done
如果我运行SELECT*FROM table ORDER BY dates,那么我将得到

2014-10-05
2014-11-01
2014-11-02
Not done
Not done
Not done
这是完美的。但当我使用desc反转此查询时,我得到:

Not done
Not done
Not done
2014-11-02
2014-11-01
2014-10-05

我想要的是“未完成”总是在底部。如果有人得到了线索:)

以下是一个简单的方法来做你想做的事:

order by (left(dates, 4) + 0 > 0) desc,
         dates
它将前四位数字转换为数字。如果数字大于零,则它假定为一年,并将这些行放在第一位。这并不检查完整的日期,但它可能足以满足您的需要。

尝试使用:

SELECT * FROM table ORDER BY FIELD(dates,'Not done') ASC, dates ASC
在你的评论之后:

SELECT dates, dateadded, (dates='Not yet') AS test, IF(test, cast(`dateadded` AS char), cast(`dates` AS char)) AS testsort FROM table ORDER BY test ASC, testsort ASC

从表order by(左(mydates,4)+0>0)desc中选择*说明,mydates不起作用。它确实会在底部列出“尚未”,但它也会在顶部列出最早的日期条目,而这些条目应该是最新的。e、 g 2014-11-02 2014-11-01等。虽然2014-10-05是按字段(mydates,“尚未”)asc列出的第一顺序,但mydates desc确实产生了我想要的结果。但是,它确实在列表的底部列出了最近的“尚未”,而我希望最新的在顶部(就在最后日期的下方),最老的在底部?我想使用“条目添加”datesmydates和dateadded进行排序。因此,我使用您描述的技术对我的日期进行排序。然后仅使用dateadded对“尚未”字段进行排序,将最近的“尚未”放在最后一个mydates条目下面。而最老的“还没有”则排在名单的末尾。。如果有道理的话。。谢谢你的帮助我不知道这样是否可以。。。(或者如果我们需要更改排序顺序)