select a.id, b.id
from people1 a
inner join people1 b on a.id < b.id
where not exists (
select *
from pairs1 c
where c.person_a_id = a.id
and c.person_b_id = b.id)
order by a.id * rand()
limit 1;
Limit 1
यदि आप एक बार में एक "ड्राइंग लॉट" कर रहे हैं तो केवल एक जोड़ी लौटाता है। अन्यथा, आपको जितने जोड़े चाहिए उतने की सीमा तक।
उपरोक्त क्वेरी मानती है कि आप प्राप्त कर सकते हैं
1 - 2
2 - 7
और वह जोड़ी 2 - 7
मान्य है क्योंकि यह अस्तित्व में नहीं है, भले ही 2 फिर से प्रदर्शित हो। अगर आप चाहते हैं कि कोई व्यक्ति केवल only one
में दिखाई दे जोड़ी कभी, फिर
select a.id, b.id
from people1 a
inner join people1 b on a.id < b.id
where not exists (
select *
from pairs1 c
where c.person_a_id in (a.id, b.id))
and not exists (
select *
from pairs1 c
where c.person_b_id in (a.id, b.id))
order by a.id * rand()
limit 1;
अगर multiple pairs
एक ही क्वेरी में जेनरेट किया जाना है, और गंतव्य तालिका अभी भी खाली है, आप इस एकल क्वेरी का उपयोग कर सकते हैं। ध्यान दें कि LIMIT 6
केवल 3 जोड़े लौटाता है।
select min(a) a, min(b) b
from
(
select
case when mod(@p,2) = 1 then id end a,
case when mod(@p,2) = 0 then id end b,
@p:[email protected]+1 grp
from (
select id
from (select @p:=1) p, people1
order by rand()
limit 6
) x
) y
group by floor(grp/2)