我正在用 php 开发抽奖项目,我需要的是以下内容,我有 4000 个用户,选择应如下所示:
EMP_ID
------
1123
1420
1340
2301
2330
4430
4321
3456
3425
7753
4256
4895
如您所见,我有不同数量的用户;他们要求我在每次抽奖中选择 1000 个用户,但这 1000 个用户应该在员工 ID 之间平均分配,例如从以 1 开头的员工中选择 200 行,从以 2 开头的员工中选择其他 200 行,依此类推。
我完成了这个任务,但是使用了多个选择语句,比如从以 1 开头的员工中随机选择 200 行,并为以 2 开头的员工选择另一个 SQL ......;有没有更好的解决方案可以在一条 SQL 语句中完成此任务?
最佳答案
如果有人对@strawberry的建议感兴趣,那就是这样的
select x.* from
((SELECT a.`emp_id` FROM `emp_list` as a WHERE a.`flag` = '0' AND a.`emp_id` LIKE '1%' order by RAND() limit 200)
UNION
(SELECT b.`emp_id` FROM `emp_list` as b WHERE b.`flag` = '0' AND b.`emp_id` LIKE '2%' order by RAND() limit 200)
UNION
(SELECT c.`emp_id` FROM `emp_list` as c WHERE c.`flag` = '0' AND c.`emp_id` LIKE '3%' order by RAND() limit 200)
UNION
(SELECT d.`emp_id` FROM `emp_list` as d WHERE d.`flag` = '0' AND d.`emp_id` LIKE '4%' order by RAND() limit 200)
UNION
(SELECT g.`emp_id` FROM `emp_list` as g WHERE g.`flag` = '0' AND g.`emp_id` LIKE '7%' order by RAND() limit 200)
) as x order by RAND()
关于php - Mysql使用不同的过滤参数选择相同数量的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34316899/