数据库概率的面试题

数据库中有两个字段 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 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/wrmfw/archive/2011/09/19/2180849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值