我有以下用户ID列表:(2,3,5),需要从"用户"中选择5个用户表,列表中具有高优先级的用户,然后使用" rand"完成限制。用户,
用户表结构:
id name
0 John
1 Adam
2 MM
3 Saly
4 Sara
5 Alx
6 Jak
7 Sarah
8 lynda
9 Riyan
我需要选择具有特定ID优先级的5个用户:
示例1,如果用户ID列表=(2,3,5) 结果:
id name
2 MM
3 Saly
5 Alx
0 John
6 Jak
示例2,如果用户ID列表=(5,6,0,1,2) 结果:
id name
5 Alx
6 Jak
0 John
1 Adam
2 MM
感谢,
答案 0 :(得分:0)
首先获得匹配ID但最多只有5位用户的用户:
SELECT id, name FROM(
SELECT id, name, 0 p FROM users WHERE id IN (...)
UNION
SELECT id, name, 1 p FROM users WHERE id NOT IN(...)
) tab
ORDER BY p
LIMIT 5;
第一个选择搜索具有给定ID的用户,第二个选择搜索所有其他用户。
列p
用于将具有匹配ID的用户放在otehr用户之前。
答案 1 :(得分:0)
尝试这样的事情:
select * from
(
select id , name
from users where id in (2,3,5)
union all
(select temp.* from (select * from users where id not in (2,3,5)
order by rand() limit 2) temp )
) tab
limit 5
;
答案 2 :(得分:0)
选项1
SELECT * FROM `users` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `users` ) ORDER BY id LIMIT 1;
选项2
SELECT * FROM `users` ORDER BY RAND() LIMIT 0,1;