主题:[转帖]php实现有权重的随机抽取mysql记录
实现思路:
按照权重,划分区间,组成一条线,然后在线上用随机方法选取到点,再由点,返回相应的记录id.具体代码如下:
/**
@$aFields中只要包含id及权重即可
例$aFields['id'] , $aFields['weight']
creater by xgd
*/
function getidbyweight($aFileds) {
global $_SGLOBAL;
$iCount=count($aFileds);
if($iCount>=2)
{
$iLine=0;
for ($i=0;$i<$iCount;$i++)
{
$aFileds[$i]['start']=$iLine+1;
$iLine +=$aFileds[$i]['weight'];
$aFileds[$i]['end']=$iLine;
}
print_r($aFileds);
$result=mt_rand(1, $iLine);
echo $result;
for ($i=0;$i<$iCount;$i++)
{
if($result>=$aFileds[$i]['start'] && $result<=$aFileds[$i]['end'])
return $aFileds[$i]['id'];
}
}
elseif($iCount==1)
{
return $aFileds[0]['id'];
}
}
了解更多 http://www.1sohu.com/newsHtm/43/n_16843.shtml#ixzz1foKIO89I
按照权重,划分区间,组成一条线,然后在线上用随机方法选取到点,再由点,返回相应的记录id.具体代码如下:
/**
@$aFields中只要包含id及权重即可
例$aFields['id'] , $aFields['weight']
creater by xgd
*/
function getidbyweight($aFileds) {
global $_SGLOBAL;
$iCount=count($aFileds);
if($iCount>=2)
{
$iLine=0;
for ($i=0;$i<$iCount;$i++)
{
$aFileds[$i]['start']=$iLine+1;
$iLine +=$aFileds[$i]['weight'];
$aFileds[$i]['end']=$iLine;
}
print_r($aFileds);
$result=mt_rand(1, $iLine);
echo $result;
for ($i=0;$i<$iCount;$i++)
{
if($result>=$aFileds[$i]['start'] && $result<=$aFileds[$i]['end'])
return $aFileds[$i]['id'];
}
}
elseif($iCount==1)
{
return $aFileds[0]['id'];
}
}
了解更多 http://www.1sohu.com/newsHtm/43/n_16843.shtml#ixzz1foKIO89I