2009-11-04 25 views
9

Digamos que tengo dos bases de datos separadas, X e Y, en el mismo servidor físico.PHP Mysql se une a las bases de datos

Todos mis consultas actualmente agotado de X.

Me parece que tengo una tabla en Y me gustaría estar disponibles para X para UNE.

Así que ahora conservo una copia de la tabla que necesito tanto para X como para Y en X e Y, pero los datos en Y cambian constantemente, por lo que la copia se vuelve obsoleta. No es crítico para esta aplicación, pero para otra que estoy diseñando ahora esto simplemente no sirve.

X en este momento sólo tiene acceso de lectura a la tabla en Y.

¿Hay una manera eficiente de hacerlo se une a través de las dos bases de datos?

Preferiría una solución de mysql en lugar de abrir múltiples conexiones de bases de datos en php.

Gracias.

EDIT: Entonces, ¿qué se hace de estas líneas ?:

$conn = mysql_connect('localhost','username','password'); 
@mysql_select_db('database_name',$conn) 

Y sí .. Esta es una aplicación de edad, de ahí el mysql en lugar de mysqli. Supongamos que puedo convertirlo.

Edit2: Entonces, ¿dónde no especifico database_name.table_name y basta con especificar table_name consigo lo que esté seleccionado, y donde yo especifico database.table_name consigo lo que pedí .. ¿verdad? Sí. Trabajos.

EDIT3: ¿Hay algún golpe de rendimiento significativo haciendo uniones cruzadas de bases de datos versus uniones dentro de la misma base de datos? Nop. Se ve igual de rápido.

Gracias a todos por sus respuestas.

+0

esas líneas permanecen sin cambios. usted todavía tiene que usar mysql_select_db() porque mysql requiere un db/schema activo antes de poder ejecutar consultas. – longneck

+1

mysql_select_db() en realidad no es necesario. Simplemente establece db predeterminado activo, y puede prescindir de él, si especifica 'db.table' – Jakub

Respuesta

2

EDIT: Así que lo convierte en una de estas líneas ?:

$ conn = mysql_connect ('localhost', 'nombre de usuario',' contraseña'); @mysql_select_db ('database', $ conn)

El mysql_select_db es opcional. Como simplemente selecciona el db activo a usar. http://us3.php.net/manual/en/function.mysql-select-db.php

Y sí .. esta es una aplicación de edad, por lo tanto, el mysql en lugar de mysqli. Supongamos que I podría convertirlo.

IMHO No creo que usar MYSQL tenga algo que ver con ser lento, de mi propia investigación en él, no hay mucha mejora de velocidad con MYSQLi contra MYSQL. Las pruebas del mundo real no muestran que sea un gran conductor de rendimiento. Sinceramente, me he quedado con MYSQL para todas mis aplicaciones.

+1

Todas mis nuevas aplicaciones usan declaraciones preparadas y mysqli. Las cosas repetitivas son más rápidas, el resto son más o menos lo mismo. –

13

que tienen que ser alias de la tabla en la otra base de datos:

select a.id 
    , b.foreign_id 
    from database1.table1 a 
    join database2.table1 b 
    on b.foreign_id = a.id 
+0

+1: Usar alias de tabla es un buen hábito para tener –

4

Si las 2 bases de datos están en el mismo servidor, sólo puede calificar la tabla con el nombre de base de datos en la consulta de unión.

select * from database1.table1 as t1 
inner join database2.table2 as t2 
on t2.fk_id = t1.pk_id 
1

sólo tiene que utilizar SQL

SELECT col1, col2 FROM foo f LEFT JOIN db2.bar b ON b.col1 = f.col1 
Cuestiones relacionadas