使用MySQL和PHP获取非重复的随机元素

我有一个场景,在这个场景中,我需要从一组条目中随机找到一个赢家.

条目可以是多次,现在我要获取用户ID分组的所有记录,并使用PHP的array_rand()方法来查找随机获胜者.分组用于避免重复元素.

在这里我面临两个问题

>查询正在超时,因为它正在处理近1000万条记录.
> PHP内存已耗尽,因为有大量记录.

我当前的查询很简单,看起来像这样

SELECT id, userID from table where id!= 1111 and created_at >='2017-08-10' group by userID

什么是最好的方法,将在如此大规模的环境下起作用?

解决方法:

使用ORDER BY RAND()并将结果限制为1,以避免内存耗尽.

SELECT id, userID
from table
where id!= 1111 and created_at >='2017-08-10'
group by userID
ORDER BY RAND()
LIMIT 1;

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...