2016-02-29 73 views
0

我即时通讯试图找出一个简单的事情的`equal`机会:MySQL的 - 如何随机选择1行中的一个大的重复的一组,使得每行有选择

如何random select 1行中的大repetitive这样设置,每行有一个equal选择的机会?

例如,每个产品有多个条目的产品表,我只想选择1个随机数。但由于其重复,该人的'chance'不应超过其他人。

一种解决方案是获取唯一列表(使用GROUP BY)并从此子查询中获取RANDOM。但对于大数据集,这不是最佳解决方案,这是我需要帮助的地方。

谢谢。

回答

0

也许把行数作为随机数的基础,然后用它作为选择那一行的极限范围的基础。

例如LIMIT X,1其中x是随机数。

+0

所以我计算唯一行的数量,然后取极限与此同时。怎样才能使选择的结果具有被选中的机会? –

+0

您将行数送入随机数生成器。这是你得到的随机数,用于X. – MikeT

0

它非常简单,首先你必须知道。 ur表中的行数。 (存储在$cnt_row)满足该条件。 然后使用randome();函数获取随机数并传递该计数行作为参数。喜欢这个。

$row= random($cont_row); 

添加乌尔随机数来查询在年底这样

limit --$row,1 

我希望这会为你工作。

+0

你的例子中哪种语言与'random()'函数相同? –

+0

所以我计算独特的行数,然后采取限制?怎样才能使选择的结果具有被选中的机会? –

+0

我userd php语言..随机函数意味着如果你传递值为5,那么它将返回1至5之间的变量只有好的。随机(5)其输出将是1,2,3,4,5任意一个。 –

0

你可以试试这个
1)从表中选择不重复的记录,并建立从该视图

SELECT * FROM My_View ORDER BY RAND() LIMIT 1;

视图

CREATE VIEW My_View AS SELECT DISTINCT (Col_Name) FROM Table_Name 

2),然后随机选择行希望它会有所帮助:)

+0

在简单的概念中看起来不错,但我有很多动态的参数在运行时基于过滤器添加。所以它变得不可能。 –

+0

我并不了解您的情况,但您始终可以在创建视图时在视图中包含尽可能多的列,并且可以添加尽可能多的条件以满足您的目标 – Vishnu

相关问题