我正在为我的网站创建统计信息,并且正在尝试让用户数最多的前10名用户。我有两个表(users,users_likes)。
我想要的输出是:
------------------------
Username | Total Likes
------------------------
user 1 | 25 likes
------------------------
user 2 | 22 likes
------------------------
user 3 | 15 likes
------------------------
答案 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.php
和UserLike.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;
}