SQL сбор данных по префиксам в других базах

171
20 января 2020, 03:20

Подскажите как правильно сформировать запрос если в одной базе у меня хранятся префиксы городов и по этим префиксам нужно подключиться к другим базам и там выбрать нужные данные с таблиц к примеру есть база

public - общая база где можно найти список городов

select id, prefix 
      from public.city
      where active = 1

здесь мы получаем массив с префиксами городов к примеру london, kiev

и есть базы городов

base_london
base_kiev

как мне добраться к таблицам user каждого города при условии что у меня уже есть префиксы городов ?

    select *
    from (select  prefix 
          from public.city
          where active = 1) as pc
   ....... ???

БД MySql 5.6

и у всех баз есть таблица user base_london.user или base_kiev.user

хотелось бы одним запросом вытянуть всех юзеров с разбивкой по городам

Answer 1

У вас не получится в конструкции from указать результат подзапроса. Первым запросов вы извлекасаете перечень нужных префиксов, вторым уже непосредственные данные.

Если работаете только с одним городом, то префикс (вообще префикс это в начале слова, а суффикс в конце, так что london в base_london это суффикс) в переменную, и ее в запрос. Если префиксов несколько, то объединяете запросы через UNION

 $row = $c->execute("select ... from `public.city` where .... limit 1")
          ->fetch('assoc');
 $dbname = "base_" . $row['prefix'];
 $users = $c->execute("select ... from `$dbname`.users where ....")
            ->fetchAll('assoc');

либо

 $cities = $c->execute("select ... from `public.city` where ... ")
             ->fetchAll('assoc');
 $queries = [];
 $prefixes = array_column($cities, 'prefix');
 foreach($prefixes as $p){
      $dbname = "base_$p";
      $queries[] = "SELECT ...
                            , '$p' as city  
                    FROM `$dbname`.users 
                    WHERE ....";
 } 
 $sql = implode("\nUNION\n", $queries);
 $users = $c->execute($sql)->fetchAll('assoc');

зы: код условный

READ ALSO
Создать динамический маршрут Laravel

Создать динамический маршрут Laravel

на данный момент есть такой маршрут category/{cid}-{clink}/ Получается, что передается только одна категорияА нужно чтобы категории перечислялись...

238
Ошибка при сохранении данных из формы

Ошибка при сохранении данных из формы

Пытаюсь сохранить данные из формы contact form 7, но при сохранении изображения выдаёт ошибку Specified file failed upload test

166
Browsersync + Gulp.js. Не обновляется браузер после изменения php файлов

Browsersync + Gulp.js. Не обновляется браузер после изменения php файлов

При изменении php файлов выводится сообщение "Reloading Browsers

146
AUTO_INCREMENT пропускает номера

AUTO_INCREMENT пропускает номера

Есть таблица с такой структурой:

147