php - 按另一个表的计数排序?

标签 php mysql laravel

我有一个名为 user_room_vists 的表,它存储每个用户对房间的访问。以下是该表的结构以及我如何在自己的数据库中创建它。

DROP TABLE IF EXISTS `user_room_visits`;
CREATE TABLE `user_room_visits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `room_id` int(10) unsigned NOT NULL,
  `entry_timestamp` double NOT NULL,
  `exit_timestamp` double NOT NULL,
  `hour` int(11) NOT NULL,
  `minute` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `entry_timestamp` (`entry_timestamp`),
  KEY `exit_timestamp` (`exit_timestamp`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1;

然后我有一个名为 users 的表,它显然包含用户。我正在尝试选择(按最高顺序)用户访问房间的次数。

这意味着我必须将 user_room_visits 中的 user_id 列与 users 表中的 id 列相匹配, 但因为它在一个单独的表中,所以变得复杂。

我没有任何示例可以向您展示我尝试过的方法,因为我被卡住了,每次我用谷歌搜索它时,它都会提出一些我无法用我自己的问题来表达的东西,那个和事实上,我只是不知道我需要做什么才能实现这一目标。我还需要在 Laravel 框架中使用其 ORM Equolent 来执行此操作,这使得查询变得容易得多,因此我需要的不仅仅是 MySQL。

这是模型文件

class UserRoomVisit extends Model
{
    protected $table = 'user_room_visits';
    public $timestamps = true;
    protected $guarded = ['id'];
}

class User extends Authenticatable
{
    protected $table = 'users';
    public $timestamps = true;
    protected $guarded = ['id'];

    public function userStats() {
        return $this->belongsTo(UserStats::class, 'id');
    }
}

最佳答案

看起来你不想在这里使用多对多关系。因此,在 Room 模型中定义 userRoomVisits 关系:

public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}

并使用 withCount()像这样获取房间的方法:

Room::withCount(['userRoomVisits' => function($q) {
        $q->where('user_id', auth()->id());
    }])
    ->latest('user_room_visits_count')
    ->get();

更新

评论中提出的另一个问题的代码:

User::withCount('userRoomVisits')->latest('user_room_visits_count')->take(5)->get();

User 模型中定义关系:

public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}

关于php - 按另一个表的计数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083078/

相关文章:

mysql - [问] :Syntax error in creating UDF in mysql

Laravel - 如何从 JS 文件访问公共(public)文件夹

mysql - 在目标表具有一对一的情况下使用 hasManyThrough

php - 为什么 "print"从右向左打印?

php - PHP的MD5哈希函数返回500内部错误

php - 如何使用 php - mysql 进行 ajax 长轮询

java - ResultSet 关闭错误后不允许操作

jquery - 如何在导航项上添加 bootstrap 4 事件类?

php - 解决查询中的错误

php - 从另一个表中选择一列用作选择键后,Mysql 连接四个表