【问题标题】:Database Query that takes random data only once只获取一次随机数据的数据库查询
【发布时间】:2019-08-19 21:28:39
【问题描述】:

我目前正在使用仅加载前 20-40 个数据的分页并使用 Laravel 作为后端为 Android 市场创建 API。 是否有任何查询选择随机数据但数据只加载一次? 例如在 mysql 中: 一种 乙 C D 乙 F

使用 inRandomOrder->take(3) 的第一个 api 调用: 甲、乙、乙

但在第二次通话中: C,D,F

编辑: 添加inRandomOrder函数

编辑更多解释: 我想获取随机的 20 个数据项(有 1000 个数据).. 因为我使用的是无限滚动,我不想一次加载所有 1000 个数据(性能问题)。所以当我想加载更多数据时,我需要再次调用 API,但如果你使用随机顺序,就有机会该数据将加载两次或更多..

即:有 6 个数据(A、B、C、D、E、F)第一次以随机顺序(A、B、F)调用,但在第二次调用中它将加载 C、D、E

抱歉,如果这是错误的提问方式。这是我第一次在 stackoverflow 上提问

【问题讨论】:

    标签: android mysql laravel api


    【解决方案1】:

    您必须将其保存在某个地方,您的 api 已被访问了多少次。

    我会用你的 api 调用发送一个计数器来代替

    非常基本的方法:

    编辑:添加拍摄

    路线:

     Route::get('getdata/{counter}/{take}', ['uses' => 'APIController@getdata']);
    

    控制器:

    public function getdata($counter, $take) {
      Model::skip($counter)->orderByRaw("RAND()")->take($take)->get();
    }
    

    编辑:添加 orderByRaw

    所以在你的 api 调用中,添加 url.com/howmanytoskip/howmanytotake/

    在 api 调用中:您必须增加跳过,加载多少,并减少 howmanytotake,以便每次加载获得更少的项目。

    【讨论】:

    • 对不起,我忘了添加 inRandomOrder 函数,有什么方法可以使用随机顺序来实现吗?
    • 我用你的方法试过了,但它仍然返回相同的数据。我的第一个电话(在 id 中):9,10,15,7,6 我的第二个电话:9,13,12, 15,10
    【解决方案2】:

    只需使用inRandomOrder() 函数进行随机搜索。

    PD:OP 没有提供足够的信息,所以我将使用User 模型作为示例。

    定义你的端点:

    /** api.php */
    
    use App\Http\Controllers\UserController;
    
    // ...
    
    Route::get('/random-users', [UserController::class, 'getRandom']);
    

    然后在你的控制器中:

    /** UserController.php */
    
    use App\User;
    
    // ...
    
    public function getRandom()
    {
        $users = User::inRandomOrder() // <--- randomizing
                            ->take(3) // <--- limiting response to 3 items
                            ->get(); // <--- getting the results
    
        return response()->json(['users' => $users], 200);
    }
    

    所以现在只需对先前定义的端点进行GET 调用,您将获得随机数据:

    GET http://www.my-website.com/api/random-users
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 2012-01-15
      • 2017-05-10
      • 1970-01-01
      • 2021-12-22
      • 2022-01-23
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多