В базе данных abc_db есть сотрудник таблицы в abc @ localhost (server), а в базе данных xyz_db есть другой столбец в xyz @ localhost (server). Как я могу присоединиться к таблицам, используя php mysql-соединение. Я написал следующий код, но он не генерирует идентификатор ресурса.
$conn = mysql_connect("localhost","abc","abcdb"); $conn1 = mysql_connect("localhost","xyz","xyzdb"); $db_select=mysql_select_db("abc_db",$conn); $db_select1=mysql_select_db("xyz_db",$conn1); $sql="SELECT * FROM employee e LEFT JOIN department d ON e.department_id=d.id "; $res=mysql_query($sql);
Вы не можете присоединиться к двум таблицам, используя разные соединения с базой данных, а не с PHP, ни на сервере MySQL. ( @RobertPitt имеет хорошую точку: вам действительно нужны два соединения? Возможно объединение двух таблиц на одном и том же хосте, но в разных базах данных, в одном соединении – при условии, что ваше соединение имеет необходимые привилегии для доступа к ним)
Если у вас есть контроль над той или иной базой данных, вы можете попробовать создать объединенную таблицу; убедитесь, что производительность в порядке, хотя (если устройства db не имеют быстрого соединения с низкой задержкой (т.е. напрямую соединены кабелем), не беспокойтесь), и существует длинный список ограничений .
Возможное меньшее зло:
Вы можете сделать выбор между различными базами данных и таблицами, если у пользователя есть разрешения для всех из них (это невозможно, если хосты базы данных разные). Это просто пример:
SELECT `table_a`.`column` AS `table_a_column`, `table_b`.`column` AS `table_b_column` FROM `database_a`.`table` AS `table_a` JOIN `database_b`.`table` AS `table_b` ON `table_b`.`smth` = `table_a`.`smth_else`
Его невозможно, единственный способ, которым это возможно на PHP, – это когда вы используете кластеры / несколько узлов с настройкой репликации.
Очевидно, вы не понимаете некоторые из более технических вещей в отношении mysql, но давайте это раньше.
$master = mysql_connect("master_host","abc","abcdb"); $slave = mysql_connect("slave_host","xyz","xyzdb"); if(mysql_select_db("abc_db",$master) && mysql_select_db("xyz_db",$slave)) { //Both Selected $sql = mysql_query("SELECT * FROM employee",$master); $rows = array(); while($row = mysql_fetch_assoc($sql)) { //Query the other $slave DB here! $slave_sql = mysql_query("SELECT * FROM department WHERE department_id = " . $row['id'],$slave); while($sub_row = mysql_fetch_assoc($slave_sql)) { $row = array_combine($sub_row,$row); } $rows[] = $row; } }
Но это не то, что вы хотите делать на самом деле.
Просто запустите попытку присоединиться к двум базам данных на одном сервере, так как ваши хосты в вашем коде являются locahost , это возможно
SELECT * FROM db1.employees db1_e,db2.records db2_r WHERE db1_e.employee_id = db2_r.record_eid
Но не отключайте 1 к внешнему серверу без использования репликации, даже тогда вы можете не использовать репликацию.
Ссылки и ссылки:
http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases
Вы не можете присоединяться к ним «на лету», не используя ни PHP, ни SQL, что вы можете сделать, это получить данные с обоих хостов и сравнить / объединить их вручную с помощью PHP.
Просто мы можем сказать. Вы не можете запускать или присоединяться к двум таблицам двух разных баз данных в PHP.
вы можете запускать запрос в приглашении mysql, но не в .php-файле, потому что каждый раз, когда вам нужно вызвать соединение с базой данных в mysql_query (); поэтому вы не можете одновременно запускать две базы данных.
у вас есть единственный выбор, просто возьмите данные таблицы первой базы данных в массиве, а затем запустите цикл массива, или вы можете использовать его id с IN в mysql или запустить два цикла while.