我有一个大表,大约1000万行,我正在尝试构建一个选择随机行数(1到1之间的任何行)的函数,将所选行上的字段更新为x(获胜者)并将剩余行的字段更新为y(失败者)。
所有行都有唯一的ID,但并不是所有的行都会被选中(该表有许多比赛的参赛作品,但该功能只需为一场比赛选择获胜者)。
我已经考虑过随机排序,但对于一张大桌来说它太慢了。
我还考虑将一个随机值分配到该行中,当它插入到表中时,它可以用于订购,但它必须是唯一的,并且可以对数千行进行批量更新,因此它将是慢慢为每一行分配一个唯一的随机值。
将数据保存为数组和随机播放的数据太多了。
有人可以提出其他解决方案吗?
如果表格不大,我就会这样做:
function getWinnersLosers($winnercount,$allwinners) {
// Must have draw id and ticketstatus id
if ( ! $this->draw_id || ! $this->ticketstatus_id ) return false;
// Update winners
$this->db->where('draw_id', $this->draw_id);
$this->db->where('ticketstatus_id', CONST_TICKETSTATUS_ENTERED);
$this->db->order_by('id', 'RANDOM');
if ( ! $allwinners ) $this->db->limit($winnercount);
$data = array( 'ticketstatus_id' => CONST_TICKETSTATUS_WINNERUNCLAIMED );
$query = $this->db->update('drawtickets',$data);
// Update losers (remaining tickets)
$this->db->where('draw_id', $this->draw_id);
$this->db->where('ticketstatus_id !=', CONST_TICKETSTATUS_WINNERUNCLAIMED);
$data = array( 'ticketstatus_id' => CONST_TICKETSTATUS_LOSE );
$query = $this->db->update('drawtickets',$data);
}