2010-08-27 7 views
4

Il y a un employé de table dans la base de données abc_db à abc @ localhost (serveur) et un autre département de table dans la base de données xyz_db à xyz @ localhost (serveur). Comment puis-je rejoindre les tables en utilisant la connexion php mysql. J'ai écrit le code suivant mais il ne génère aucun identifiant de ressource.Table PHP-Mysql join à partir d'un hôte différent

$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

Je pense que ce n'est pas possible. – pltvs

+0

Vous ne pouvez pas vous connecter via deux connexions, mais vous pouvez vous connecter à travers des bases de données sur le même hôte, et vous n'avez besoin que d'une seule connexion pour cela. Voir la fin de la réponse de @ RobertPitt. – Piskvor

Répondre

7

Vous ne pouvez pas joindre deux tables en utilisant des connexions différentes à la base de données, ni à partir de PHP, ni sur le serveur MySQL. (@RobertPitt a un bon point: avez-vous réellement besoin deux connexions Il est possible de joindre deux tables sur le même hôte, mais dans différentes bases de données, au sein d'une connexion - en supposant que votre connexion dispose des droits nécessaires pour accéder à la fois?)

Si vous avez le contrôle sur l'une ou l'autre des bases de données, vous pouvez essayer de configurer une table federated; assurez-vous que les performances sont correctes (si les machines db n'ont pas une connexion rapide, une connexion à faible latence (c'est-à-dire directement reliée par un câble), ne vous embêtez pas), et il y a un long list of limitations.

moindres maux possibles:

  • répliquent la table d'un serveur à l'autre (difficile à mettre en place)
  • « join » les manuellement en PHP (brut, inefficace, mais à peu près votre seul choix si vous n'avez pas de contrôle sur la base de données)
+0

+1 sur les fédérés, j'apprends aussi quelque chose de nouveau :) – RobertPitt

+0

@RobertPitt: Dans ce cas, quelque chose de pas très utile - je dois encore trouver un cas d'utilisation réel pour cela. – Piskvor

+0

Je viens juste de lire une partie de la documentation et cela ne semble pas être une aide énorme, mais je ne l'ai jamais su alors au moins je le sais maintenant :) – RobertPitt

1

Vous ne pouvez pas les joindre "à la volée" en utilisant ni PHP ni SQL, ce que vous pouvez faire est d'extraire des données des deux hôtes et de comparer/joindre les manuellement en utilisant PHP.

2

Ce n'est pas possible, la seule façon possible de le faire sur PHP serait d'utiliser des clusters/plusieurs nœuds avec une configuration de réplication.

De toute évidence, vous ne comprenez pas certaines des choses les plus techniques en ce qui concerne mysql, mais donnez-le il y a.

$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; 
    } 
} 

Mais ce n'est pas ce que vous voulez vraiment faire.

Juste Incase vous essayez de rejoindre sur 2 bases de données sur le même serveur, puisque vos hôtes dans votre code sont locahost, cela est possible

SELECT * FROM db1.employees db1_e,db2.records db2_r WHERE db1_e.employee_id = db2_r.record_eid 

Mais pas sever 1 à un serveur externe sans utiliser la réplication, même alors vous ne pouvez pas répliquer beaucoup d'aide.

Références et liens:

http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

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

2

Vous pouvez faire une sélection entre différentes bases de données et tables si l'utilisateur utilisé dispose des autorisations à tous (ce qui est impossible si les hôtes de la base de données sont différentes). Ceci est juste un exemple:

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

Simplement, nous pouvons dire. Vous ne pouvez pas exécuter ou joindre deux tables de deux bases de données différentes en PHP.

vous pouvez exécuter une requête sur l'invite mysql mais pas dans le fichier .php car chaque fois que vous avez besoin d'appeler la connexion à la base de données dans mysql_query(); donc vous ne pouvez pas exécuter deux bases de données en même temps. Vous avez un choix unique, prenez les données de la première table de base de données dans un tableau, puis exécutez la boucle de tableau ou vous pouvez utiliser son id avec IN dans mysql ou exécuter deux while loop.

+1

Veuillez ne pas utiliser sigs ou slogans: [Are slabs & signatures refusé?] (http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed). Merci – Kev

Questions connexes