我有一个表Foo
,其中包含一列' FooId
'
选择设置Foo attribute
的用户使用positive integer
进行设置,而其他用户则选择此列的值为-1
。
现在,我希望FooId
列按顺序排列表的内容,以便在具有默认值(即-1)的结果之前排序具有正FooId
的结果。
所以,我的查询类似于select * from Foo order by FooId desc
。
现在我想随机化我的搜索结果,positive 'FooId'
的搜索结果仍然在FooId = -1
的搜索结果之前,但结果是随机 。 rand()
的某些内容也应该没问题,因为我现在不关注性能。
我可以选择制定查询吗?
答案 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);