代码之家  ›  专栏  ›  技术社区  ›  Success Man

如何将“Join with Select语句结果”更改为“Laravel雄辩”?

  •  0
  • Success Man  · 技术社区  · 6 年前

    我的问题是:

    SELECT 
    * 
    FROM
    (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1 
    INNER JOIN
    (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
    ON t1.ks = t2.ks
    

    我想把它改成拉拉维尔雄辩。我需要使用Laravel雄辩的paginate方法

    我试着这样做:

    $query =  \DB::select(\DB::raw("
        SELECT *
        FROM (
            SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
        ) t1 
        INNER JOIN (
            SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
        ) t2 ON t1.ks = t2.ks 
    "));
    

    我很困惑 paginate 方法。我需要它。因为我要在视图中显示分页

    脚本如下: {{ $results->appends(Request::query())->render() }}

    我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   fubar    6 年前

    首先,基于 linked question 从中获取数据库模式,可以使用更简单的查询找到您试图查询的数据。

    我编写了以下查询以用于MySQL DBMS,因为您的或链接的问题都没有指定DBMS类型。

    SELECT ks, COUNT(*) AS tasks, SUM(age < palt) AS late
    FROM tasks
    GROUP BY ks;
    

    这是一个 SQL Fiddle 用示例数据演示查询工作。

    其次,可以使用Laravel查询生成器构建上述查询,如下所示。

    $results = DB::table('tasks')
        ->selectRaw('ks, COUNT(*) AS tasks, SUM(age < palt) AS late')
        ->groupBy('ks')
        ->paginate(10);