在SQL语句和ORDER BY Random中获取DISTINCT结果

时间:2013-08-16 02:10:52

标签: php sql postgresql

所以我每次都试图获得独特的结果,但我无法让它正常工作。

用户可以在表中有多个条目,但我希望它只提取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 |
----------------------------------------------------

这就是我的表格列{J} btl_idbigserialmem_idmedia_idposted并且有效bigint

mem_id可能有多行不唯一,因为用户有多个条目。我想通过mem_id拉出两个随机但唯一的行,但也检索select中的media_id。希望这更清楚。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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