我有这种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的请求来做这个吗?
答案 0 :(得分:1)
我想你想要:
SELECT *
FROM notes
ORDER BY vip DESC,
price ASC,
RAND()
请注意,在较大的桌子上按兰德订购会有很高的性价比。
答案 1 :(得分:1)
是的,您应该能够在单个查询中实现指定的结果集。 (如果我们理解规范;对于实际规范似乎存在很大程度的混淆。)
如果vip
列是整数,并且包含值0和1,并且“VIP”行是vip=1
的行,并且您希望首先返回这些行(在“非VIP”之前) “行,但您希望以伪”随机“顺序返回,然后依次为vip=0
price
)
实现这一目标的一种方法是使用这样的ORDER BY
子句:
SELECT n.*
FROM notes n
ORDER BY IF(n.vip, RAND(), NULL), n.price
注意:将n.price
替换为n.id
或n.name
分别按“id”或“按名称”排序,而不是“按价格”。
答案 2 :(得分:-1)
试试这个:
SELECT * FROM notes ORDER BY price DESC, price ASC, RAND(vip);