我有一个名为" myorder"的列。我想只使用列#34; myorder"按升序排序前5个元素。然后其余的元素ordererd由id按降序排列。我已经尝试了,但我似乎没有得到这100%。我用这个简单的例子创建了一个sqlfiddle。有人能帮助我吗?
sqlfiddle中的顺序应为:蓝色,棕色,黄色,红色,绿色,橙色,灰色,黑色,白色。
答案 0 :(得分:0)
将其附加到sql语句的末尾:
ORDER BY FIELD(id,3,4,5,1,2,9,8,7,6)
这将根据指定顺序的id字段手动对结果进行排序,以便按顺序获取颜色。
或者你可以:
按字段排序(姓名,蓝色,棕色,黄色......)
答案 1 :(得分:0)
Union不会保留订单,至少不会保留在所有数据库中。 要完成此操作,您需要选择一个假列并在结果上使用顺序(总计)
这是一个解决方案:
(
SELECT Id, myorder, myorder as fake, name from tbl WHERE myorder!=0) UNION
(SELECT id, myorder, 2000 as fake,name from tbl WHERE myorder=0) ORDER BY fake asc, id desc
只要你保持假数字足够高,这将无论如何都有效。
答案 2 :(得分:0)
也许试试
SELECT * from tbl ORDER BY IF(myorder=0, 2147483647, myorder) ASC, id DESC
如果通过"前5"你的意思是非零myorder
答案 3 :(得分:0)
如果未指定myorder,我们可以使用NULL值而不是零吗?
如果是这样,我们可以这样做:
SELECT * from tbl ORDER BY -myorder DESC, id DESC
小提琴:
http://sqlfiddle.com/#!2/ef9ee/4
提示强制空值排序最后:MySQL Orderby a number, Nulls last
答案 4 :(得分:0)
使用CASE
语句和以下技巧(例如):
SELECT *,
CASE myorder
WHEN 0 THEN id
ELSE 99999999 - myorder
END AS ord
FROM tbl
ORDER BY ord DESC