У меня есть 3 базы данных, и теперь мне нужно объединить несколько таблиц из каждого из них в единый запрос. Как мне это сделать?
Это моя связь:
try { $con_options = array( PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // _SILENT (pub) || _WARNING || _EXCEPTION (dev) ); $con_1 = new PDO('mysql:host=localhost; dbname=database_1', 'user_1', 'pass_1', $con_options); $con_2 = new PDO('mysql:host=localhost; dbname=database_2', 'user_2', 'pass_2', $con_options); $con_3 = new PDO('mysql:host=localhost; dbname=database_3', 'user_3', 'pass_3', $con_options); } catch (PDOException $err) { // catch, record/log and do stuff with errors }
У меня есть 3 разных пользователя с уникальным паролем для каждой базы данных. Одна база данных хранит данные приложения для приложений facebook и других приложений iframe. Еще один содержит все данные веб-магазина, такие как продукты, заказы, клиенты и т. Д., А третий – структуру сайта и контент.
Теперь; Я хотел бы JOIN
три из них вместе в одном запросе.
Пока я писал этот вопрос; Одна из моих идей заключалась в том, чтобы иметь еще один «супер» -усер с доступом ко всем трем базам данных и просто сделать запрос на несколько таблиц regoular? Будет ли это приемлемым решением?
Если да, нужно ли указывать, в какой базе данных, и в запросе?
Вам понадобится пользователь, имеющий доступ ко всем трем базам данных.
Вы присоедините их вместе, указав полное имя таблицы, что-то вроде этого:
SELECT * FROM database_1.logs AS d1 LEFT JOIN database_2.users AS d2 ON d1.username = d2.username ORDER BY d1.timestamp DESC LIMIT 10