Mysql: Abfrage über zwei Datenbanken


Sprint

Erfahrenes Mitglied
Hallo zusammen,

Ich stehe hier vor dem Problem, zwei Tabellen aus zwei unterschiedlichen Datenbanken verbinden zu müssen. Dabei ist es so, daß alle Datensätze aus DB1.Tabelle1 selektiert werden sollen, die nicht älter als 30 Tage sind und deren ID nicht bereits in DB2.Tabelle2 vorhanden ist.

Natürlich wäre es möglich, erst alle Datensätze aus Tabelle1 zu holen und dann mit Tabelle2 abzugleichen, aber was ich so gelesen habe, soll es ja auch möglich sein, die Abfrage in einem Durchgang durchzuführen. Soll ja funktionieren, was ich so gefunden habe.

Mein hauptsächliches Problem besteht nun darin, daß ich nicht kapiere, wie ich zwei verschiedenen Links, die per mysqli_connect zu den Datenbanken verbinden, zu einer Abfrage zusammen setze.

PHP:
$con1 = mysqli_connect("localhost","my_user1","my_password1","my_db1");
$con2 = mysqli_connect("localhost","my_user2","my_password2","my_db2");
Wie bringe ich da ein mysqli_query hin, bei dem ich ja immer nur eine Verbindung angeben kann? Wäre toll, wenn mich d jemand etwas schlauer machen könnte.

Danke schon mal im Voraus,
Sprint
 

basti1012

Erfahrenes Mitglied
wenn die Datenbanken auf den gleichen Server sind dann soll das gehen.
Aber wäre es nicht sinnvoller die Daten alle in einer DB zu kopieren?

Hier mal ein Eintrag den ich gefunden habe
Es geht zwar mit mehreren Datenbanken aber mit unterschiedlichen Servern wohl eher nicht. Denn Du musst ja erstmal die Verbindung aufbauen und daran sollte es scheitern.
Mit mehreren DBs sähe es übrigens so aus:
SELECT db1.tabelle.feld_a, db1.tabelle.feld_b, db2.tabelle_c.feld_h FROM db1.tabelle
INNER JOIN db2.tabelle_c
ON db1.tabelle.feld_a = db2.tabelle_c.feld_h
LIMIT 30
habe noch was gelesen wo steht das das auch über verschiedene Datenbanken geht.
Dafür sollte man einen Verbindungsserver einrichten.

Nur wie weit das richtig ist und wie das funktioniert ,müßen dir die Php( sql ) Profis erklären
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
Gemäss seinem php-Schnippsel sind aber beide DB's auf dem selben Server (localhost).
Bastis Beispiel sollte also gehen.
Das Einzige was mir noch einfällt, wäre die zweite Tabelle on the fly als federated table in db1 temporär einzubinden (was - ungetestet - auch funktionieren sollte, wenn die db's auf unterschiedlichen Servern sind).

EDIT: Falls die DB's tatsächlich auf dem selben Server sind (localhost wie oben), dann kann man auch nur eine Connection erstellen, nimmt aber als "Ziel"-Datenbank die DB namens "mysql" (die ist auf jedem MySQL-Server drauf).
PHP:
$con1 = mysqli_connect("localhost","my_user","my_password","mysql");
Setzt natürlich voraus, dass "my_user" ausreichend Zugriff auf den Server hat.
Was das geforderte SQL-Select betrifft, ist das ein simpler LEFT JOIN mit IS NULL auf der rechten Seite
 
Zuletzt bearbeitet:

Sprint

Erfahrenes Mitglied
Das Ganze ist in zwei Datenbanken aufgeteilt, da die zu zwei verschiedenen Webseiten gehören. Und da die Verbindungen zwischen den beiden nur sehr klein sind, macht eine Vereinigung der beiden DB für mich nicht viel Sinn.

Ich habe mal etwas rumprobiert und bin dann bis zu diesem ganz einfachen Testscript gekommen:

PHP:
$mysqli = mysqli_connect("localhost", $user_pt, $passwort_pt, $db_name_pt);

$sql = "SELECT herpag.pruefung.firmenname FROM herpag.pruefung hp, dyn.listen dl WHERE hp.pid = dl.pruefnr";
$erg = mysqli_query($mysqli,$sql);

while($row = mysqli_fetch_array($erg, MYSQLI_ASSOC))
    print_r($row);
So funktioniert es dann tatsächlich. Allerdings mit der Einschränkung, daß - bei Plesk als Serververwaltung - beide Datenbanken unter der selben Webseite angelegt sein müssen und der DB User Zugriff auf alle DB der Webseite haben muß. Da ich das nicht will, werde ich es doch über zwei getrennte Abfragen machen, die dann miteinander abgeglichen werden.

Falls aber wirklich mal jemand diesen Fall hat, dann klappt es so auch mit PHP.

Danke an alle für die Denkanstöße.
 

Neue Beiträge