【问题标题】:MySql : Order differently within the same columnMySql:同一列中的顺序不同
【发布时间】:2012-02-23 08:44:37
【问题描述】:
我有一个表 Foo 有一个列 'FooId'
选择设置Foo attribute 的用户,将其设置为positive integer,而对于其他用户,此列的值为-1。
现在,我希望按FooId 列对表格的内容进行排序,这样FooId 为正的结果将排在具有默认值(即-1)的结果之前。
所以,我的查询类似于select * from Foo order by FooId desc。
现在我想随机化我的结果,这样positive 'FooId' 的结果仍然在FooId = -1 的结果之前,但结果是随机排序的。 rand() 的东西也应该没问题,因为我现在不关注性能。
我有哪些选择来制定查询?
【问题讨论】:
标签:
mysql
random
sql-order-by
【解决方案1】:
SELECT * FROM Foo
ORDER BY IF(FooId>0,RAND(),-0.1) DESC;
【解决方案2】:
您可以执行SELECT ... WHERE FooID >=0 ORDER BY RAND(),然后将 UNION 与另一个选择一起使用,如下所示:
SELECT *
FROM Foo
WHERE FooID >= 0
ORDER BY RAND()
UNION ALL
SELECT *
FROM Foo
WHERE FooID == -1;
您可以使用UNION ALL 连接任何表,只要它们具有相同的列。
【解决方案3】:
试试这个查询 -
SELECT * FROM Foo ORDER BY if(FooId >= 0, 0, 1), RAND();
【解决方案4】:
试试下面:
SELECT * FROM Foo
ORDER BY IF(FooId > 0,0,1);