我有一张“消息”表。在此表中,我有以下列: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条消息。
我尝试在获取所有邮件后过滤结果,但我认为这是浪费资源。如何通过单个查询有效地完成它?
答案 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');
});