同时对查询进行排序和随机化

时间:2011-01-20 05:04:32

标签: sql mysql

我需要查询我的数据库并部分订购并随机化结果。 例如,

SELECT * FROM products ORDER BY views DESC LIMIT 5

会产生这样的结果:

id   name       views
---------------------
 0   Product #1     2
 1   Product #2     1
 2   Product #3     0
 3   Product #4     0
 4   Product #5     0

现在,我如何在查询中添加RAND()(或类似的东西),以便最后三个项目(产品#3,#4和#5)以随机顺序出现,因为它们的数量相同视图,但前两个仍然基于相同的视图字段下降?

我试过像

这样的东西
SELECT * FROM products ORDER BY views, RAND() DESC LIMIT 5

但很明显它不起作用。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

SELECT * FROM products ORDER BY views DESC, RAND() LIMIT 5;

可能 ...您可以先检索记录,然后使用其他编程语言随机排序

答案 1 :(得分:0)

我不知道在mysql中,但在sql server中你可以做order by newid()。我确信在mysql中做同样的事情也会起作用,我只是不知道mysql中的函数是什么来生成一个guid。

答案 2 :(得分:-1)

mysql是否支持unionunion all?我不得不想象它确实......

如果是这样,那么:

SELECT * FROM products where views > 0 ORDER BY views DESC

union all

SELECT * FROM products where views = 0 order by RAND()

显然你的完整查询可能更复杂,你可能需要修改where子句以满足你的需要,但似乎是一个相当灵活的解决方案。