我需要查询我的数据库并部分订购并随机化结果。 例如,
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
但很明显它不起作用。
提前谢谢。
答案 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是否支持union
和union all
?我不得不想象它确实......
如果是这样,那么:
SELECT * FROM products where views > 0 ORDER BY views DESC
union all
SELECT * FROM products where views = 0 order by RAND()
显然你的完整查询可能更复杂,你可能需要修改where子句以满足你的需要,但似乎是一个相当灵活的解决方案。