2010-08-27 2 views
4

В базе данных abc_db есть сотрудник таблицы в abc @ localhost (server), а в базе данных xyz_db есть xaz_db в xyz @ localhost (server). Как я могу присоединиться к таблицам, используя php mysql-соединение. Я написал следующий код, но он не генерирует идентификатор ресурса.Соединение 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); 
+0

Я думаю, что это невозможно. – pltvs

+0

Вы не можете присоединиться к двум соединениям, но вы можете присоединиться к базам данных на одном и том же хосте - и для этого вам нужно только одно соединение. См. Конец ответа @ RobertPitt. – Piskvor

ответ

7

Вы не можете присоединиться к двум таблицам, используя разные соединения с базой данных, а не с PHP, ни на сервере MySQL. (@RobertPitt имеет хороший момент: вы на самом деле нужда два соединение Можно соединить две таблицы на одном хосте, но в разных базах данных, в течение одного соединения - если ваше соединение имеет необходимые права доступа как?)

Если у вас есть контроль над той или иной базой данных, вы можете попробовать настроить таблицу federated; убедитесь, что производительность в порядке, хотя (если машины db не имеют быстрого соединения с низкой задержкой (т. е. напрямую соединенного кабелем), не беспокойтесь), и есть long list of limitations.

Возможные меньшие бедствия:

  • копируют таблицу с одного сервера на другой (сложно установить)
  • «присоединиться к» их вручную в PHP (брутто, неэффективна, но в значительной степени ваш единственный выбор если у вас нет контроля над базой данных)
+0

+1 о федеративном, я узнаю что-то новое :) – RobertPitt

+0

@RobertPitt: В этом случае что-то не очень полезно - мне еще нужно найти реальный прецедент для этого. – Piskvor

+0

Я просто прочитал часть документации, и это, похоже, не ОГРОМНАЯ помощь, но я никогда не знал об этом, так что, по крайней мере, я знаю об этом сейчас :) – RobertPitt

1

Вы не можете присоединиться к ним «на лету», не используя ни PHP, ни SQL, то, что вы можете сделать, это выборка данных с обоих хостов и сравнение/объединение их вручную с помощью PHP.

2

Невозможно, единственный способ, которым это возможно на 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; 
    } 
} 

Но это не то, что вы хотите делать на самом деле.

Просто упакуйте ваши попытки присоединиться через 2 базы данных на том же сервере, так как оба ваши хосты в вашем коде 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

http://dev.mysql.com/doc/refman/5.0/en/replication.html

2

Вы можете сделать выбор между различными базами данных и таблицами, если используется пользователь имеет разрешения на все из них (это не возможно, если хозяева базы данных различны). Это просто пример:

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` 
0

Просто мы можем сказать. Вы не можете запускать или присоединяться к двум таблицам двух разных баз данных в PHP.

вы можете запускать запрос по запросу mysql, но не в .php-файле, потому что каждый раз, когда вам нужно вызвать соединение с базой данных в mysql_query(); поэтому вы не можете одновременно запускать две базы данных.

У вас есть один выбор, просто возьмите данные таблицы первой базы данных в массиве, а затем запустите цикл массива, или вы можете использовать его id с IN в mysql или запустить цикл while while.

+1

Пожалуйста, не используйте сиги или теги: [Являются ли теги и подписи запрещены?] (http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed). благодаря – Kev