在mysql中,以随机顺序从2个表中选择2条不同的记录
我的问题如下:在mysql中,以随机顺序从2个表中选择2条不同的记录,mysql,Mysql,我的问题如下: SELECT tb1.id, tb2.id FROM tb1 JOIN tb2 ON tb1.group = tb2.id WHERE tb1.status = 1 AND tb2.status = 1 GROUP BY tb1.group ORDER BY RAND( ) LIMIT 2 这两个表在1000行以下都很小,所以按兰德排序就可以了 对于tb2中的每条记录,tb1中有10条记录通过tb2.id=tb1.group链接。我想选择两个不同的组,每组在tb1中随机记
SELECT tb1.id, tb2.id
FROM tb1
JOIN tb2 ON tb1.group = tb2.id
WHERE
tb1.status = 1 AND tb2.status = 1
GROUP BY tb1.group
ORDER BY RAND( )
LIMIT 2
这两个表在1000行以下都很小,所以按兰德排序就可以了
对于tb2中的每条记录,tb1中有10条记录通过tb2.id=tb1.group链接。我想选择两个不同的组,每组在tb1中随机记录
让GROUPBY子句始终从tb1中选择组中的第一条记录。删除GROUPBY子句时,它会按照应该的方式随机选择一个。。。。但它可以每隔一段时间在同一组中选择两个项目
我如何从tb1中选择两个不同组中的两个随机记录?不知何故,这似乎比我想象的要复杂,但我认为它符合您的要求:
select tb2.*,
(select tb1.id from tb1 where tb1.group = tb2.id and tb1.status = 1 order by rand() limit 1)
from tb2
where tb2.status = 1 and
exists (select 1 from tb1 where tb1.status = 1 and tb1.group = tb2.id)
group by tb2.id
order by rand()
limit 2
我可能误解了你的要求,所以让我澄清一下我认为你的要求。。。 tb1中的2个随机记录分为2个不同的组。。。对于每个tb2记录,您需要从tb1表中获得两条随机记录。因此,如果tb2有100条记录,那么您希望结果集中有200条记录。。。第1组2人,第2组2人,第3组2人,等等 如果是这样的话,我只需要包装您的查询并利用MySQL变量,在每个组中放置一个计数器并应用HAVING子句
select
AllPossible.group,
@lastSeq := if( AllPossible.group = @lastGroup, @lastSeq +1, 1 ) as GroupSeq,
@lastGroup = AllPossible.group
from
( SELECT
tb1.id,
tb2.id
FROM
tb1
JOIN tb2
ON tb1.group = tb2.id
WHERE
tb1.status = 1
AND tb2.status = 1
ORDER BY
tb1.group,
RAND( ) ) AllPossible,
( select @lastGroup := 0,
@lastSeq := 0 ) sqlvars
having
GroupSeq < 3;
由此,它按顺序分配一个组序列。由于RAND是首先应用的,并以随机顺序返回,因此它只会在记录1、2、3、4、下一组-1、2、3、4等上盖章。。。having子句最后声明,我只想要那些组序列小于3的组,因此每个组只保留1&2个,并从最终结果集中排除所有剩余部分
1 19 1 (keep)
1 95 2 (keep)
1 3 3 (throw away)
1 28 4 (throw away)
2 34 1 (keep)
2 14 2 (keep)
2 89 3 (throw away)
2 41 4 (throw away)
3 9 1 (keep)
3 25 2 (keep)
3 42 3 (throw away)
3 76 4 (throw away)