【问题标题】:Getting top cloners in my Database?在我的数据库中获得顶级克隆?
【发布时间】:2018-01-07 07:28:51
【问题描述】:

我想知道是否有人至少可以帮助我找到从哪里开始。我知道这是一个很大的问题,但我已经找了一段时间,但找不到与如何处理这两列相关的任何内容。

我有一个名为“用户”的表,我想选择前 20 个克隆帐户最多的表。当我说克隆帐户时,我的意思是我想显示具有相同 IP 或机器 ID 的帐户最多的用户用户名列表。

IP 列称为 ip_last,机器列称为 machine_id。

如何获得克隆帐户最多的前 20 名?我只想显示用户名、IP 克隆的帐户数量以及机器克隆的帐户数量。

我接受知道如何在 MySQL 中执行此操作,但如果有人可以帮助我使其与 Laravel 一起使用,那也会有很大帮助。

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

你可以试试这个吗?

$result = DB::table('users')
             ->select('ip_last', DB::raw('count(*) as total'))
             ->groupBy('ip_last')
             ->take(20);

machine_id 也是如此,两者都可以尝试->groupBy('ip_last','machine_id')

【讨论】:

  • 这只是获取唯一 IP 地址的列表吗?我看不出这与我的要求有多接近。
【解决方案2】:

它没有经过测试,但这应该是诀窍:

DB::table("users")
->select("username", DB::raw("COUNT(*) AS `cloned`"))
->whereIn("ip_last", function ($query) {
    $query->select("ip_last")
        ->from("users")
        ->groupBy("ip_last")
        ->havingRaw("COUNT(*) > 1");
})
->orWhereIn("machine_id", function ($query) {
    $query->select("machine_id")
        ->from("users")
        ->groupBy("machine_id")
        ->havingRaw("COUNT(*) > 1");
})
->orderBy("cloned", "DESC")
->limit(20);

【讨论】:

  • 使用这个我收到错误?解析错误:语法错误,意外 ')',期望变量 (T_VARIABLE)
  • 我还在末尾添加了 ->get(),因为你没有,它现在给了我这个错误:SQLSTATE[42000]:语法错误或访问冲突:1140 Mixing of GROUP columns (MIN (),MAX(),COUNT(),...) 如果没有 GROUP BY 子句,则没有 GROUP 列是非法的(SQL:select username, COUNT() AS cloned from users其中ip_last in (select ip_last from users group by ip_last COUNT() > 1) 或machine_id in (select machine_id from users group by machine_id COUNT(*) > 1) order by cloned desc limit 20)
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2017-02-09
相关资源
最近更新 更多