2009-11-04 12 views
9

Diciamo che ho due database separati, X e Y, sullo stesso server fisico.PHP Mysql si collega ai database

Tutte le mie domande attualmente a corto di X.

Trovo che ho una tabella in Y vorrei essere a disposizione di X per i join.

Quindi ... ora tengo una copia del tavolo di cui ho bisogno sia per X che per Y sia in X che in Y, ma i dati in Y cambiano continuamente, quindi la copia diventa presto obsoleta. Non critico per questa applicazione, ma per un altro che sto progettando ora questo non funzionerà.

X in questo momento ha bisogno solo accesso in lettura alla tabella in Y.

C'è un modo efficace per fare unisce attraverso i due database?

Preferirei una soluzione mysql invece di aprire più connessioni database in php.

Grazie.

EDIT: Quindi, cosa ne sarà di queste linee ?:

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

E sì .. questa è una vecchia applicazione, da qui il mysql invece di mysqli. Supponiamo che potrei convertirlo.

EDIT2: Allora, dove non specifico database_name.table_name e basta specificare table_name ottengo ciò che è stato selezionato, e dove io specificare database.table_name ottengo quello che ho chiesto .. giusto? Sì. Lavori.

EDIT3: C'è un notevole calo di prestazioni mediante join di database incrociati rispetto a join nello stesso database? No. Sembra altrettanto veloce.

Grazie a tutti per le vostre risposte.

+0

quelle righe rimangono invariate. devi ancora usare mysql_select_db() perché mysql richiede un db/schema attivo prima di poter eseguire query. – longneck

+1

mysql_select_db() in realtà non è richiesto. Imposta solo il db predefinito attivo e puoi farne a meno, se specifichi 'db.table' – Jakub

risposta

2

EDIT: Allora, cosa ne sarà di queste linee ?:

$ conn = mysql_connect ('localhost', 'username',' parola d'ordine'); @mysql_select_db ('database_name', $ conn)

Il mysql_select_db è opzionale. Come si seleziona solo il db attivo da usare. http://us3.php.net/manual/en/function.mysql-select-db.php

E sì .. questo è un vecchio app, quindi il mysql invece di mysqli. Supponiamo che I possa convertirlo.

IMHO Non penso che l'utilizzo di MYSQL abbia a che fare con l'essere lento, dalla mia ricerca in esso, non c'è molto miglioramento della velocità con MYSQLi vs MYSQL. I test sul mondo reale non mostrano che si tratta di un grande fattore di prestazioni. Sono onestamente rimasto con MYSQL per tutte le mie app.

+1

Tutte le mie nuove app usano mysqli e istruzioni preparate. Le cose ripetitive sono più veloci, il resto è più o meno lo stesso. –

13

si devono alias la tabella nel database di altro:

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

+1: Usare gli alias di tabella è una buona abitudine per avere –

4

Se le 2 basi di dati sono sullo stesso server, si può semplicemente qualificare la tabella con il nome del database nella query join.

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

Basta utilizzare SQL

SELECT col1, col2 FROM foo f LEFT JOIN db2.bar b ON b.col1 = f.col1 
Problemi correlati