Laravel - Совокупный результат не дает правильного результата - PullRequest
0 голосов
/ 15 июня 2019

Я ожидаю, что результат будет показан на диаграмме:

incorrect result

Но я получил результат ниже:

wrong result

The:

  1. Всего активных пользователей для каждой строки равно 0, что неверно

  2. Всего неактивных пользователей для каждой строки равно 0, что неверно

  3. Всего пользователей для каждой строки равно 44, и это то же самое для всех, что неверно

См. Мой код ниже:

        $subscribers= Cloudsubscriptions::join("services","cloudsubscriptions.service_name","=","services.name")
        ->join("service_type","services.service_type","=","service_type.id")
        ->select("cloudsubscriptions.service_name"
                ,"service_type.name as service_type"
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM cloudsubscriptions WHERE('cloudsubscriptions.is_subscribe' = 1)) as total_active_users")
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM cloudsubscriptions WHERE('cloudsubscriptions.is_subscribe' = 0)) as total_inactive_users")
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM cloudsubscriptions) as total_users"))
        ->groupBy("cloudsubscriptions.service_name")
    ->get();

Где я ошибся?

1 Ответ

0 голосов
/ 15 июня 2019

Используйте этот запрос.

$subscribers= DB::table('cloudsubscriptions')
    ->join("services","cloudsubscriptions.service_name","=","services.name")
    ->join("service_type","services.service_type","=","service_type.id")
    ->select("cloudsubscriptions.service_name"
            ,"service_type.name as service_type"
            ,DB::raw("(SELECT count(*) FROM cloudsubscriptions WHERE is_subscribe = 1 AND services.name = cloudsubscriptions.service_name) as total_active_users")
            ,DB::raw("(SELECT count(*) FROM cloudsubscriptions WHERE is_subscribe = 0 AND services.name = cloudsubscriptions.service_name) as total_inactive_users")
            ,DB::raw("(SELECT count(*) FROM cloudsubscriptions WHERE services.name = cloudsubscriptions.service_name) as total_users"))
    ->groupBy("cloudsubscriptions.service_name")
->get();

Это очень плохая практика с моей точки зрения.У вас красноречивые отношения с Laravel.Красноречивое отношение облегчит вашу работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...