Laravel: получить общее количество пройденных и неудачных результатов из mysql - PullRequest
0 голосов
/ 28 сентября 2018

Я застрял в этой проблеме.у меня есть таблица в базе данных, которая os_flash_result, которая может быть либо PASS, либо FAIl.мне нужно отобразить количество неудачных и передаваемых результатов в виде графика с датой.

Моя структура таблицы и данные следующие:

mysql> select * from mobile_prod_pograms;
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
| id | device_id | os_flash_result | action                 | station | build_id | created_at          | updated_at          |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
|  2 | 1         | FAIL            | Mobile Production Prog |       1 | mp1      | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 19 | 1         | PASS            | Mobile Production Prog |       1 | mp1      | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 20 | 1         | PASS            | Mobile Production Prog |       1 | mp1      | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
3 rows in set (0.00 sec)

Я использую Laravel, поэтому язапишите следующий запрос, чтобы получить результаты Count of PASS.

$mobile_chart_query =  DB::table('mobile_prod_pograms')
            ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(id) as total'))
            ->where('os_flash_result','=','PASS')
            ->where('created_at','>=','2018-09-17')
            ->groupBy('date')
            ->get();

Приведенный выше запрос работает нормально.но я хочу получить ошибку и передать результаты подсчета в одном запросе с датой. Как я могу добиться этого?Любая помощь будет оценена ...

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете использовать условное агрегирование:

$mobile_chart_query =  DB::table("mobile_prod_pograms")
    ->select(DB::raw("DATE(created_at) AS date"),
             DB::raw("COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count"),
             DB::raw("COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count"))
    ->where("created_at", ">=", "2018-09-17")
    ->groupBy("date")
    ->get();

Это соответствует следующему необработанному запросу MySQL:

SELECT
    DATE(created_at) AS date,
    COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count,
    COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count
FROM mobile_prod_pograms    -- should be called mobile_prod_programs
WHERE
    created_at >= '2018-09-17'
GROUP BY
    date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...