MySql:在同一列中以不同方式排序

时间:2012-02-23 08:44:37

标签: mysql random sql-order-by

我有一个表Foo,其中包含一列' FooId'

选择设置Foo attribute的用户使用positive integer进行设置,而其他用户则选择此列的值为-1

现在,我希望FooId列按顺序排列表的内容,以便在具有默认值(即-1)的结果之前排序具有正FooId的结果。 所以,我的查询类似于select * from Foo order by FooId desc

现在我想随机化我的搜索结果,positive 'FooId'的搜索结果仍然在FooId = -1的搜索结果之前,但结果是随机rand()的某些内容也应该没问题,因为我现在不关注性能。

我可以选择制定查询吗?

4 个答案:

答案 0 :(得分:2)

SELECT * FROM Foo
ORDER BY IF(FooId>0,RAND(),-0.1) DESC;

答案 1 :(得分:0)

您可以执行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连接起来。

答案 2 :(得分:0)

尝试此查询 -

SELECT * FROM Foo ORDER BY if(FooId >= 0, 0, 1), RAND();

答案 3 :(得分:0)

尝试下面的内容:

SELECT * FROM Foo
 ORDER BY IF(FooId > 0,0,1);