我试图使用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的页面上找到答案,但是找不到具体的东西。这也是我的第一个问题,所以我希望我正确地问它。 :)
答案 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"];