之乎者也2011

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
数据库中有两个字段 id, sorce.假设sorce的取值范围是 5-10. 

  按照以下概率实现sorce数据的更新。 

  5(25%) => 6 5(25%) => 7 

  6(20%) => 7 

  7(25%) => 8 7(25%) => 6 

  8(10%) => 6 8(25%) => 9 

  9(15%) => 8 9(20%) => 10 

  10(25%) => 9 

  要求考虑性能及扩展性。写出概率分布相关代码。
第一个网友的做法如下:
function getChangeNum($oldNum){
    if($oldNum<5 || $oldNum>10){
        return false;
    }
    $randArr = array(
        5=>array(25=>6, 50=>7),6=>array(20=>7),
        7=>array(25=>8,50=>6),8=>array(10=>7,35=>9),
        9=>array(15=>8,35=>10),10=>array(25=>9),
    );
    $arr = $randArr[$oldNum];
    $random = rand(1,100);
    foreach ($arr as $k=>$v ){
        if( $random<$k ){
            return $v;
        }
    }
return false;
}

第二个网友的做法如下:

$updateArray = array('5.25'=>'6','5.25'=>'7');

foreach($updateArray as $k=>$v)
{
  $ks = explode('.',$k,2);
  $sql = "update table set field='{$v}' where field={$ks[0]} and round(rand(),2) <={$ks[1]}";
  $db->query($sql);
}
posted on 2011-09-19 02:55  之乎者也2011  阅读(264)  评论(0编辑  收藏  举报