2016-02-29 99 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