如何从一个表中获取一个随机行,使用RedBeanPHP,在id号顺序中有空白?

时间:2017-07-13 17:23:04

标签: php mysql redbean

我试图使用RedBean从表中获取随机行。我试过这个:

$amount = R::count($names);
$id = rand(0, $amount);
$randomname = R::load( $names, $id );
$name = $randomname["name"];

但很快我发现这种方式不正确,因为表中的id号顺序有差距,可能有ids 1-95,然后是115-523,然后是530-600等。有差距,因为我手动删除了行,因此随机$ id有时落在这些间隙上,永远不会落在最后一行,因为$ amount小于上一个id。

据我所知,在试图找到其他人的答案之后'问题,id应保持不变,这意味着我不需要尝试改变id本身,以便它们不会包含间隙。所以我试着做一些事情。

我也尝试了这个,它有效,但我觉得它对单行结果的检查太多了:

$randomnames = R::findAll($names);
$a = 0;
foreach($randomnames as $n){
    if($a == $id){
        $name = $n['name'];
        $a = $amount;
    }
    else $a++;
}

也许我应该以某种方式使用MySQL的RAND,如果在RedBean本身中没有任何东西存在,或者R :: exec与SQL ...如何获得随机行最好?

我刚刚开始学习RedBean和PHP,试图在RedBean的页面上找到答案,但是找不到具体的东西。这也是我的第一个问题,所以我希望我正确地问它。 :)

1 个答案:

答案 0 :(得分:0)

我的两分钱; - )

$ids = R::getCol("select id from $names"); //returns an array of id's indexed as 0..number of names-1
$random_index = rand(0, sizeof($ids)-1);
$random_name = R::load( $names, $ids[$random_index] );
$name = $random_name["name"];