WHERE Inside DB :: Необработанный оператор, возвращающий 0 - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь выполнить некоторые подвыборы DB :: raw, используя Laravel, но мне возвращается 0, даже если я проверяю его и проверяю DB, есть много записей, соответствующих критериям.

My запрос выглядит так:

$currentUnixTime = time();
    $dt12 = $currentUnixTime - (12*60*60);
    $dt24 = $currentUnixTime - (24*60*60);
    $dt48 = $currentUnixTime - (2*24*60*60);
    $dt168 = $currentUnixTime - (7*24*60*60);

    $updates = DB::table("portals")
        ->select(
              DB::raw("(SELECT COUNT(guid) FROM portals) AS total", []),
              DB::raw("(SELECT COUNT(guid) FROM portals WHERE addedTS > :dt) AS 'dt24'", array(":dt" => $dt24)),
              DB::raw("(SELECT COUNT(guid) FROM portals WHERE addedTS > :dt) AS 'dt48'", array(":dt" => $dt48)),
              DB::raw("(SELECT COUNT(guid) FROM portals WHERE addedTS > :dt) AS 'dt168'", array(":dt" => $dt168)),
              DB::raw("(SELECT COUNT(guid) FROM portals WHERE updatedTS > :dt) AS 'ut168'", array(":dt" => $dt168))
        )
        ->first();

Первый DB::raw("(SELECT COUNT(guid) FROM portals) AS total") возвращает число, а остальные возвращают 0, что заставляет меня подозревать, что это связано с включением оператора WHERE.

Вот мой результат:

{"total":"47180","dt24":"0","dt48":"0","dt168":"0","ut168":"0"}

РЕДАКТИРОВАТЬ: Попробовал предложение от Антония, но получил тот же результат.

$updates = DB::table("portals")
        ->select(
            DB::raw("(SELECT COUNT(guid) FROM portals) AS total,
                     (SELECT COUNT(guid) FROM portals WHERE addedTS > ?) AS 'dt24',
                     (SELECT COUNT(guid) FROM portals WHERE addedTS > ?) AS 'dt48',
                     (SELECT COUNT(guid) FROM portals WHERE addedTS > ?) AS 'dt168',
                     (SELECT COUNT(guid) FROM portals WHERE updatedTS > ?) AS 'ut168'",
                     [$dt24, $dt48, $dt168, $dt168]
            )
        )
        ->first();

Есть идеи?

Спасибо ! :)

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Попробуйте это ...

$updates = DB::table("portals") ->selectRaw("Sum(case when addedTS > $dt24 then 1 Else 0 End) as dt24, Sum(case when addedTS > $dt48 then 1 else 0 end) as dt48,Sum(1) as total") ->first();

0 голосов
/ 16 марта 2020

Вы можете попробовать подзапросы , как

$updates =  Portal::select(DB::raw('count(*) as total'))->addSelect([
    'dt24' => Portal::where('addedTS', 'dt24')->count(),
    'dt48' => Portal::where('addedTS', 'dt48')->count(),
    'dt168' => Portal::where('addedTS', 'dt168')->count(),
    'ut168' => Portal::where('addedTS', 'ut168')->count(),
])->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...