2013-08-16 33 views
1

因此,我試圖每次都獲得獨特的結果,並且無法使其正常工作。在SQL語句和ORDER BY中獲取DISTINCT結果隨機

用戶可以在表中有多個條目,但是我希望它只能提取2個唯一條目,不管每個用戶在表中可能有多少個條目。

這應該不是那麼難。在MySQL中似乎更容易,即使它可能不是標準的。無論如何,這就是我所擁有的,它仍然能夠取得多個結​​果。它不應該允許應該是唯一的多個mem_id's。現在,這兩個結果允許相同的mem_id

SELECT media_id,mem_id FROM battle_entries WHERE active='1' AND 
mem_id!=".$mem_id." GROUP BY media_id,mem_id ORDER BY RANDOM() LIMIT 2 

編輯:

---------------------------------------------------- 
| btl_id | mem_id | posted | media_id | active | 
---------------------------------------------------- 

這就是我的表列的樣子btl_idbigserialmem_idmedia_idpostedbigint和活躍是smallint

可以有多個由於用戶具有多個條目,因此mem_id不唯一。我想通過mem_id拉兩個隨機但唯一的行,但也檢索select中的media_id。希望這更清楚。

+0

請,而目前的結果顯示示例的另一個如預期是。 – Badaro

+0

什麼是表格模式?你想通過'mem_id'分組,但是得到兩個隨機的'media_id',對吧? –

+0

@ muistooshort這是正確的。 –

回答

0

試試這個:

SELECT * FROM 
    (SELECT DISTINCT ON (mem_id) mem_id, media_id 
    FROM battle_entries 
    WHERE active='1' AND mem_id!=1) s 
ORDER BY RANDOM() LIMIT 2; 

sqlfiddle

+0

已經嘗試使用Distinct。我得到這個錯誤與您的示例'錯誤:選擇DISTINCT ON表達式必須匹配初始ORDER BY表達式LINE 1:SELECT DISTINCT ON(mem_id)mem_id,media_id FROM battle_ent ...' –

+0

好吧,請嘗試我編輯的版本。 – clime

+0

沒有錯,但它總是選擇相同的行,但只是交替出現在第一位。所以它並不是真正的隨機,因爲它沒有通過整個表格。 –

0

也可以使用ROW_NUMBER:

with cte as (
    select 
     *, 
     row_number() over (partition by mem_id order by random()) as row_num 
    from battle_entries 
    where active = 1 and mem_id <> 1 
) 
select * 
from cte 
where row_num = 1 
limit 2 

sql fiddle demo