如何计算每个用户的喜欢并获得顶级用户的喜欢?

时间:2019-02-28 22:10:19

标签: php laravel statistics

我正在为我的网站创建统计信息,并且正在尝试让用户数最多的前10名用户。我有两个表(users,users_likes)。

我想要的输出是:

------------------------
Username  |  Total Likes
------------------------
user 1    |     25 likes
------------------------
user 2    |     22 likes
------------------------
user 3    |     15 likes
------------------------

2 个答案:

答案 0 :(得分:1)

您可以直接通过查询来完成此操作,方法是join将两个表放在一起,然后group按用户名输入结果,并得到count(*)个赞。

一个带有join的警告是,内部联接只会向您显示实际有喜欢的用户,因此,如果用户没有喜欢,则不会显示该用户。因此,您可以在users和users_likes表之间执行一个outer join而不是常规的内部联接,这样它将始终返回所有用户,即使他们没有喜欢。如果您从users_likes结果中count()中的一列开始,它将输出“ 0”,因为将不计算空值(由外部联接返回)。

这里是如何执行此操作的示例。该查询假定您基于username列加入users和users_likes表。这不是理想的表设计,但是除非您可以发布表模式,否则这足以使您满意。

select
    users.username, count(users_likes.username) as total_likes
from
    users
    left outer join users_likes
        on (users.username=users_likes.username)
group by
    users.username
order by
    count(users_likes.username) desc

答案 1 :(得分:1)

假设:

1-您有2个模型User.phpUserLike.php

2-个用户表PK为id,而user_likes表中的FK为user_id

3-在您定义的用户模型内部具有多个userLikes关系:

<?php

//has Many UserLikes
public function userLikes()
{
    return $this->hasMany(UserLike::class);
}

您可以使用:

<?php

$users = \App\User::withCount('userLikes')
                ->orderBy('user_likes_count', 'desc')
                ->take(10)
                ->get();

foreach ($users as $user) {
    echo '<br/>User '.$user->id.' - '.$user->user_likes_count;
}