【发布时间】:2015-08-12 21:29:37
【问题描述】:
有没有办法在 mySQL 中按块对结果集的行进行洗牌?
为了说明:所需的查询将以四种可能的顺序之一随机返回以下四行(但不是其他可能的顺序,例如项目 4 永远不应在项目 3 之前)。
原始订单,A 在 B 之前,item1 在 item2 之前
item, b_order, i_order
item1, A, 1
item2, A, 1
item3, B, 1
item4, B, 2
A 在 B 之前,item2 在 item1 之前
item2, A, 1
item1, A, 1
item3, B, 1
item4, B, 2
B 在 A 之前,item2 在 item1 之前
item3, B, 1
item4, B, 2
item2, A, 1
item1, A, 1
B 在 A 之前,item1 和 item2 没有交换
item3, B, 1
item4, B, 2
item1, A, 1
item2, A, 1
我想可能有一种比较优雅的方法来解决这个问题,通过使用
SELECT * FROM items ORDER BY random_number_for_each_block, i_order, RAND()
我还没弄清楚如何生成这个“random_number_for_each_block”变量。
【问题讨论】:
-
您的问题是什么?您有三个不同的结果集,但我不明白您要做什么。写一个查询返回所有三个?指定参数以获取一个或另一个?
-
@GordonLinoff 我的目标是编写一个随机返回四个枚举结果集之一的查询。当然,在实际情况下,这些块随机、行随机的实验设计是任意复杂的。我试图澄清这个问题。
-
你在“原始订单”中失去了我
标签: mysql