Php 在SQL语句中获得不同的结果,并按随机顺序排序
所以我每次都试图得到独特的结果,但我无法让它正常工作 用户可以在表中有多个条目,但我希望它只提取两个唯一的条目,无论每个用户在表中可能有多少个条目 这应该没那么难。在MySQL中似乎容易得多,尽管它可能是非标准的。不管怎么说,这就是我所拥有的,它仍然会产生多种结果。它不应该允许多个应该是唯一的mem_id。现在,这允许两个结果使用相同的mem_idPhp 在SQL语句中获得不同的结果,并按随机顺序排序,php,sql,postgresql,Php,Sql,Postgresql,所以我每次都试图得到独特的结果,但我无法让它正常工作 用户可以在表中有多个条目,但我希望它只提取两个唯一的条目,无论每个用户在表中可能有多少个条目 这应该没那么难。在MySQL中似乎容易得多,尽管它可能是非标准的。不管怎么说,这就是我所拥有的,它仍然会产生多种结果。它不应该允许多个应该是唯一的mem_id。现在,这允许两个结果使用相同的mem_id SELECT media_id,mem_id FROM battle_entries WHERE active='1' AND 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是bigserial,mem_id,media_id,posted是bigint,active是smallint
可能有多行的mem_id不唯一,因为用户有多个条目。我想按mem_id拉取两个随机但唯一的行,但也要在select中检索media_id。希望这更清楚 试试这个:
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;
您可以使用行号:
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
请给出当前结果和预期结果的示例。表架构是什么?您想按mem_id分组,但得到两个随机媒体id,对吗?@muistooshort这是正确的。@muistooshort我用架构信息更新了答案。已尝试使用Distinct。我从您的示例错误中得到这个错误:表达式上的SELECT DISTINCT必须与表达式的初始顺序相匹配第1行:mem_id mem_id,媒体id FROM battle_ent…没有错误,但它总是选择相同的行,但只是交替出现在第一行。所以它不是真正随机的,因为它不会遍历整个表。好吧,你不需要对不满足where条件的行进行随机排序。我加上的小提琴似乎很好用。
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