使用CodeIgniter选择和更新大表中的任意行数

时间:2013-12-03 17:11:38

标签: php mysql codeigniter random

我有一个大表,大约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);

}

0 个答案:

没有答案
相关问题