php - 如何在 laravel 5 查询生成器上创建一个 mysql select 子查询

标签 php mysql laravel

我在下面有一个带有子查询的查询。 我如何在 laravel 5 查询生成器中生成它? 困扰我的是共享第一个查询列的子查询。

    SELECT
    DATE(review_headers.`created_at`) AS `date`,
    COUNT(review_headers.id) AS reviews,
    (
          SELECT 
        (ROUND((SUM(IF(rd2.`param_value` >=9, 1,0))/COUNT(rh2.id))*100,2)) - (ROUND((SUM(IF(rd2.`param_value` <7, 1,0))/COUNT(rh2.id))*100,2))
          FROM review_headers rh2
          INNER JOIN review_details rd2 ON rd2.review_header_id = rh2.id
          WHERE DATE(rh2.created_at) <= DATE(review_headers.`created_at`)
       ) AS cumulativeNPS
FROM review_headers
INNER JOIN review_details ON review_details.review_header_id = review_headers.id
GROUP BY DATE(review_headers.`created_at`)
ORDER BY DATE(review_headers.`created_at`)

表格:

评论标题

id  subject                           created_at  
------  -----------------------  ---------------------
20  review 8                   2016-03-31 15:50:57
21  review 9                   2016-03-30 15:50:57
22  review 10                  2016-01-14 15:50:57
23  review 16                  2016-04-25 08:19:03
24  review 17                  2016-04-25 08:19:03
25  review 18                  2016-04-19 08:19:03
26  review 19                  2016-04-18 08:19:03
27  review 20                  2016-04-17 08:19:03
28  review 21                  2016-04-07 08:19:03
29  review 22                  2016-03-27 08:19:03
30  review 23                  2016-03-25 08:19:03
31  review 24                  2016-04-25 08:19:03
32  review 25                  2016-04-25 08:19:03
33  review 26                  2016-04-19 08:19:03
34  review 27                  2016-04-18 08:19:03
35  review 28                  2016-04-17 08:19:03
36  review 29                  2016-03-27 08:19:03
37  review 30                  2016-03-25 08:19:03

评论详情

id  review_header_id  param_value  
------  ----------------  -------------
97                21  7            
103                22  4            
109                23  8            
115                24  5            
121                25  6            
127                26  8            
133                27  9            
139                28  9            
145                29  5            
151                30  9            
157                31  3            
163                32  8            
169                33  10           
175                34  4            
181                35  7            
187                36  4            
193                37  7          

最佳答案

这里你有基于你的查询的完整代码:

$subQuery = \DB::table('review_headers as rh2')
    ->select(\DB::raw('ROUND((SUM(IF(rd2.`param_value` >=9, 1,0))/COUNT(rh2.id))*100,2)) - (ROUND((SUM(IF(rd2.`param_value` <7, 1,0))/COUNT(rh2.id))*100,2)'))
    ->join('review_details as rd2'. 'rd2.review_header_id', '=', 'rh2.id')
    ->whereRaw('DATE(rh2.created_at) <= DATE(review_headers.`created_at`)');
$query = \DB::table('review_headers')
     ->select(
         \DB::raw('DATE(review_headers.created_at) AS date'),
         \DB::raw('COUNT(review_headers.id) AS reviews'),
         \DB::raw('(' . $subQuery->toSql() . ') as cumulativeNPS')
     )
     ->join('review_details', 'review_details.review_header_id', '=', 'review_headers.id')
     ->groupBy('review_headers.created_at')
     ->orderByRaw('DATE(review_headers.created_at)')
     ->mergeBindings($subQuery);

关于php - 如何在 laravel 5 查询生成器上创建一个 mysql select 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37023883/

相关文章:

php - Laravel - 注销后返回

php - 如何将 base64 字符串转换为音频 mp3 文件?

mysql - 如何将这两个查询合并为一个

mysql - 将 Power BI 桌面从虚拟机连接到 Ubuntu

php - 在 Ubuntu 上安装 Laravel 的挫败感

php - 在哪里存储 Android 应用程序(如 Whatsapp)的个人资料图像?

PHP get_meta_tags() 没有像我预期的那样工作

mysql - MongoDB 中的 "Transactions "?

php - 拉维尔 5 : Eloquent & form model for business hours

laravel - 不递送到之前退回的地址 - Mailgun