按2列和rand()排序

时间:2014-08-11 14:58:59

标签: mysql

我有这种DB结构:

|id|name|vip|price|

这个内容:

|id|name |vip|price|
|1 |note1|1  |10000|
|2 |note2|0  |13000|
|3 |note3|0  |50000|
|4 |note4|1  |12000|
|5 |note5|0  |500  |

在网站中我有3种类型的排序 - 按ID,按价格,按名称。

但首先我必须出示VIP注释,他们必须按兰德订购:)

如: SELECT * FROM notes ORDER BY vip DESC, ORDER BY price ASC

但VIP注释也必须按兰德排序:)

我可以通过1个DB的请求来做这个吗?

3 个答案:

答案 0 :(得分:1)

我想你想要:

  SELECT * 
    FROM notes 
ORDER BY vip DESC, 
         price ASC,
         RAND()

请注意,在较大的桌子上按兰德订购会有很高的性价比。

答案 1 :(得分:1)

是的,您应该能够在单个查询中实现指定的结果集。 (如果我们理解规范;对于实际规范似乎存在很大程度的混淆。)

如果vip列是整数,并且包含值0和1,并且“VIP”行是vip=1的行,并且您希望首先返回这些行(在“非VIP”之前) “行,但您希望以伪”随机“顺序返回,然后依次为vip=0

的”非VIP“行(price

实现这一目标的一种方法是使用这样的ORDER BY子句:

SELECT n.*
  FROM notes n
 ORDER BY IF(n.vip, RAND(), NULL), n.price

注意:将n.price替换为n.idn.name分别按“id”或“按名称”排序,而不是“按价格”。

答案 2 :(得分:-1)

试试这个:

SELECT * FROM notes ORDER BY price DESC, price ASC, RAND(vip);