从DB中选择列值的特定结果数

时间:2015-05-25 03:44:10

标签: php laravel sqlite

我有一张“消息”表。在此表中,我有以下列:Resources theme = null; try { theme = getPackageManager().getResourcesForApplication(nowTheme); //nowTheme = packageName } catch (PackageManager.NameNotFoundException e) { } if (theme != null) { int resID = theme.getIdentifier("theme" , "layout", nowTheme); mView = mInflater.inflate(theme.getLayout(resID), null); } else { mView = mInflater.inflate(R.layout.theme_default, null); dataConverter.dataPut(this, "default", SP_LOCATION_THEME, "theme"); //dataConverter = sharedpreferences Toast.makeText(getApplicationContext(), "Error", 3000).show(); }

我想获取所有消息的集合,但每个“from”最多2条新消息;

假设我有来自3个不同的唯一身份用户的50条消息。但我想从每个用户那里获取最多2条消息。

我尝试在获取所有邮件后过滤结果,但我认为这是浪费资源。如何通过单个查询有效地完成它?

1 个答案:

答案 0 :(得分:0)

我认为单独使用查询来解决这个问题太复杂了 尝试先让所有用户,然后迭代它们并从中获取2条最新消息。

更好的是,使用急切加载,因此效率更高。例如:

$users = User::with(['messages' => function ($query) {
    $query->orderBy('created_at', 'desc')->limit(2);
}])->get();

$users->each(function ($user) {
    // $messages will consists of two most recent messages
    $messages = $user->getRelation('messages');
});