数据库查询仅获取一次随机数据

时间:2019-03-29 00:46:06

标签: android mysql laravel api

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

使用inRandomOrder-> take(3)的第一个api调用: A,B,E

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

编辑: 添加inRandomOrder函数

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

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

抱歉,这是错误的询问方式..这是我第一次询问stackoverflow

2 个答案:

答案 0 :(得分:0)

您必须将其保存在访问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调用中:您必须增加跳过次数,加载的数量,并减少获取的方式,以便每次加载时获得的物品更少。

答案 1 :(得分:0)

只需使用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