我在'用户'和'媒体'表之间有一个belongsToMany关系。Laravel,根据相关型号排列SUM
我想在我的视图中按照'like'sum(=每种媒体的流行度)和分页显示媒体。例如,首先显示在用户中获得最多喜好的媒体。
我的DB:
'media' : id, name
'media_user' : id, media_id, user_id, like
'users' id, name
“喜欢不是一个布尔值,但一个整数,但一个整数,也可以是-1等等......我想总结一下。
我有我的用户模型:
class User extends Authenticatable
{
public function medias()
{
return $this->belongsToMany('App\Media')->withPivot('like')->withTimestamps();
}
...
}
我见过这样的事情在另一篇文章,但我不能让它工作...
$medias=Media::leftJoin(
DB::raw('(SELECT media_id, SUM(like) AS likes FROM media_user GROUP BY media_id) as v'),
'v.media_id', '=', 'media.id'
)->orderBy('likes', 'desc')->paginate(20);
下面是例外,我用得到上述查询
SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以便在第1行附近使用as like as FROM media_user GROUP BY media_id)作为v on v.media_id = medi'(SQL:select count(*)as aggregate from media` inner join(SELECT media_id,SUM(like)AS like FROM media_user GROUP BY media_id)as v on v.media_id = media.id)
谢谢!
如何/为什么不工作?即您是否收到错误?你没有得到任何结果?你得到的结果,但不是你所期望的? –
以下是我在原始文章中写入的$ medias = Media :: leftJoin时得到的异常: SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与你的MariaDB服务器版本相对应的手册,以便在第1行的'v'.mediamedia'='medi'附近使用as like as AS like FROM media_user GROUP BY media_id)使用正确的语法(SQL:select count (*)作为来自'media'内部连接的聚合(SELECT media_id,SUM(like)AS like media_user GROUP BY media_id)作为v on'v'.media_id' ='media'.'id') –