我正在实现一个轮盘赌选择,并且我希望在SQL中保留尽可能多的代码。我的尝试已经产生了下面的查询。 $ 1是一个与我发送给SQL代码的权重相同范围的随机变量(不清楚如何使random()只被调用一次)。重量是车轮上行的槽的大小。 random()是一个返回一个随机数的SQLITE函数。这里是查询全部:用SQL查询轮盘选择
SELECT id
FROM items
WHERE weight >= $1
ORDER BY random()
LIMIT 1
我的问题是,这仍然是轮盘?基本算法将需要所有权重的总和,然后选取范围0..sum的随机值 - 这将确定选择哪一行。相反,这个例程首先对所有满足一个随机数的行进行过滤,然后对它们的顺序进行扰码并选择第一个。
一个微妙的变化是使用$ 1而不是第二次调用random()。这可能会让日常工作变得更加公平,但我不确定它会如何 - 这意味着每一行都有自己的机会可以被过滤或不被过滤。
所以,我想我问这个镜子轮盘多少钱,因为它显然遵循不同的步骤。但它是否反映了结果?我刚才想过
对于没有任何反应,我会解决我自己的研究结果;)(谢谢你看虽然!) – 2009-08-24 13:01:26