Подскажите как правильно сформировать запрос если в одной базе у меня хранятся префиксы городов и по этим префиксам нужно подключиться к другим базам и там выбрать нужные данные с таблиц к примеру есть база
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
хотелось бы одним запросом вытянуть всех юзеров с разбивкой по городам
У вас не получится в конструкции 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');
зы: код условный
Сборка персонального компьютера от Artline: умный выбор для современных пользователей