当前位置: 首页 > 面试题库 >

如何使用laravel Eloquent Querybuilder编写带有子查询的选择查询?

燕嘉颖
2023-03-14
问题内容

我从查询中得到了结果。

我的简单SQL是:

 SELECT
    o2.driver_id,
    total_delieveries,
    DATE_FORMAT(o1.created_at ,'%Y-%m-%d') AS created_at
FROM
    (
        SELECT
            driver_id,
            created_at,
            COUNT(driver_id) AS total_delieveries
        FROM
            orders
        WHERE
            is_paid = 0
        AND order_status = 5
        AND created_at BETWEEN "'.$first_Day.'"
        AND "'.$last_Day.'"
        GROUP BY DATE_FORMAT(created_at ,'%Y-%m-%d'),driver_id
    )
 o1 INNER JOIN orders o2 ON o1.driver_id = o2.driver_id GROUP BY o1.created_at

在Laravel源代码中,我编写了查询:

$responseData =  DB::select(DB::raw('select t.driver_id,total_delieveries,DATE_FORMAT(q1.created_at,\'%Y-%m-%d\') as created_at from (  SELECT driver_id, created_at, COUNT( driver_id ) AS total_delieveries FROM orders WHERE is_paid=0 AND order_status = 5 AND created_at BETWEEN "'.$first_Day.'" AND "'.$last_Day.'" GROUP BY DATE_FORMAT(created_at,\'%Y-%m-%d\'),driver_id) q1 INNER JOIN orders t ON q1.driver_id = t.driver_id GROUP BY q1.created_at'));

我得到了想要的结果,但我想以更好的方式编写它。

请告诉我编写此查询的正确和正确的方法。


问题答案:

同时显示此答案以及您的变体:

$subQuery = \DB::table('orders')->selectRaw('driver_id, created_at, COUNT(driver_id) AS total_delieveries')
    ->where('is_paid', 0)
    ->where('order_status', '5')
    ->whereBetween('created_at', [$first_Day, $last_Day])
    ->groupBy(\DB::raw('DATE_FORMAT(created_at ,"%Y-%m-%d"),driver_id'));

$q = \DB::table(\DB::raw('('.$subQuery->toSql().') as o1'))
    ->selectRaw('o2.driver_id,total_delieveries,DATE_FORMAT(o1.created_at ,"%Y-%m-%d") AS created_at')
    ->join('orders as o2', 'o1.driver_id', '=', 'o2.driver_id')
    ->groupBy('o1.created_at')
    ->mergeBindings($subQuery)
    ->get();


 类似资料:
  • 问题内容: 我要实现以下目标: 表的当前状态(my_table) (my_table2)的查询结果 表的预期状态(my_table) 可以在一个更新查询中完成吗?我正在RHEL 5.0上寻找Sybase ASE 12.5 编辑: 我找不到Sybase的解决方案,但该问题的当前答案适用于MS SQL Server。 问题答案: 更新 在MS SQL Server中,您将执行此操作。OP指出这在Syb

  • 问题内容: 我有此查询,它运行良好 从此查询中,我从我的位置(这是我的第一张表)中选择所有3 KM的餐厅。 但是我需要从3Km中的食品接头中选择AVG等级。 该查询也运行完美: 但是我需要添加这两个查询,通过它们我可以选择所有那些食品接头及其等级AVG。 问题答案: 只需放置子查询,您将得到结果:

  • 问题内容: 谁能帮助我获取下面提到的JPA查询的JPA标准查询。 问题答案: 假设Person与语言有关,这就是您在较早的Hibernate中所做的事情: 我第一次尝试使用JPA 2.0: 请让我知道这是否适合您。 编辑: 更新查询以仅使用一个呼叫。

  • 问题内容: 我在将下面的SQL转换为Zend Db查询时遇到了一些问题。 我之前已经了解了代码-但Zend Db无法正确生成查询。谁能告诉我我想念的东西吗? SQL确实可以正常工作。我想使用Zend Paginator功能来使用Zend Db重写它。 任何帮助是极大的赞赏。 J 问题答案: 这个: 给出以下内容:

  • 问题内容: 我正在使用JPA 2.0。Hibernate 4.1.0.Final和Java6。如何从以下psuedo-SQL编写JPA查询? 我的域对象如下所示: 我知道涉及CriteriaBuilder.greatest,但是我只是不知道如何编写查询。这将返回所有与组织匹配的事件对象,但据我所知。 问题答案: 有两种方法,一种使用JPQL,另一种使用条件查询。 JPQL就是: 使用条件时,您可能

  • 我的问题与我在StackOverflow上看到的其他问题略有不同,所以请不要将此与之前的答案混淆。 我有个疑问 我想选择前500行,因为Oracle在GROUP和ORDER BY条件(证据)之前处理where子句,所以我必须通过将此查询包装在另一个查询中来选择前500行来实现这一点。 所以,现在我的查询看起来像... 这一切都很好,但我正在努力使用QueryOver API将其转换为NHibern