Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer

UNION DISTINCT на laravel?

Здравствуйте. Есть несколько баз данных. Все идентичны по структуре, разница только в содержании. Есть таблица bets, и соответствующая модель. В таблице bets есть столбик user_id. Он может повторятся. Мне нужно вытащить кол-во уникальных user_id'ов (это реализуется с помощью $query->distinct('user_id')->count('user_id') ). Но сделать мне это нужно для всех баз данных. Имя баз данных и таблиц дано а так-же сейчас написан такой код:

public static function todayAll() {
        $queries = [];
        $rooms = []; // get list somehow (HIDEN)
        foreach($rooms as $room) {
            $query = DB::table(db_table_name($room, self::class))->where('created_at', '>=', Carbon::today())->distinct('user_id');
            $queries[] = $query;
        }
        $result = $queries[0];
        for($i=1; $i < count($rooms); $i++) {
            $result = $result->unionAll($queries[$i]);
        }
        return count($result->get());
    }


К сожалению я не могу вызвать count() перед union'ом, а так-же не могу вызвать его после, так-как тогда он применяется только к первому запросу к тому-же не правильно. Приходится использовать обычный count от php. Собственно замена unionAll на union так-же не помогает. Я уже не знаю что делать. Эту ф-ю обезательно нужно оптимизировать, ибо столько запросов в разные базы это слишком.
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
Как вариант - сделайте в бд вьюшку, объединяющую результаты со всех таблиц, а потом дистинкт каунт по результатам вьюшки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы