php - 如何使用 RedBeanPHP 从表中获取 id 编号顺序有间隙的随机行?

标签 php mysql redbean

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

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

但是很快我发现这种方式不正确,因为表中的id号顺序有间隙,可以有id 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 的页面上找到答案,但找不到具体的内容。这也是我的第一个问题,所以我希望我问得正确。 :)

最佳答案

我的两分钱;-)

$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"];

关于php - 如何使用 RedBeanPHP 从表中获取 id 编号顺序有间隙的随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087290/

相关文章:

php - javascript 如果负面条件不起作用

php - 将付款方式标题添加到 Woocommerce 3.5 中的管理订单列表

mysql - 标题表与其他表格内容

azure - Docker Compose php/mysql 无法连接mysql

php - 为什么 RedBean 的交易功能不起作用?

php - 如何使用具有多个模型关系的 Yii2 kartik gridview 可编辑列

php - 将图像 url 替换为 img 标签

mysql - 自动设置mysql autoincrement为最小值

php - 根据sql查询显示通知

php - RedBean PHP 不插入两个表