Ankündigung

Einklappen
Keine Ankündigung bisher.

$link in mysqli_query mit LEFT JOIN aus zwei verschiedenen Datenbanken

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • $link in mysqli_query mit LEFT JOIN aus zwei verschiedenen Datenbanken

    Moin moin!

    Es ist lange her, dass ich programmiert habe; damals funktionierte mysql noch. Nun musste ich alles auf mysqli umstellen. Hat ganz gut geklappt, aber jetzt komme ich nicht weiter. Ich hoffe, hier sind noch so hilfsbereite Menschen wie damals!

    Ich habe zwei Datenbanken auf zwei verschiedenen Servern. Etwa so:
    $link1 = mysqli_connect ("localhost", "Name", "passwort", "db1");
    $link2 = mysqli_connect ("192.168.234.24", "Name2", "PW2", "db2");
    Nun stelle ich eine Anfrage mit einem Left Join z.B. so:
    $sql = mysqli_query($link2, "SELECT * FROM db2.person p
    LEFT JOIN db1.teilnahme t ON t.ID_person=p.ID
    ..."
    Welchen $link muss ich denn nun in die Anfrage setzen? Oder gar beide? So wie ich es oben habe funktioniert es jedenfalls nicht.

    Viele Grüße
    Raymaen


  • #2
    Zitat von Raymaen Beitrag anzeigen
    Welchen $link muss ich denn nun in die Anfrage setzen?
    Zu dem richtigen Datenbankserver, wo du die Abfrage ausführen willst.

    Kommentar


    • #3
      Das hat früher funktioniert? Meines Wissens kann MySQL nicht Abfragen über unterschiedliche Datenbanken auf unterschiedlichen Servern.

      Kommentar


      • #4
        Ein JOIN über 2 Server kann nicht funktionieren.

        Du musst daraus also 2 getrennte Abfragen machen.

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          Ein JOIN über 2 Server kann nicht funktionieren.
          Doch doch, das KANN funktionieren. Aber nicht mit MySQL und auch nicht mit MySQLi. Es geht aber mit PostgreSQL. Damit kannst Du Abfragen nicht nur über 2 unterschiedliche PG-Server machen, sondern auch z.B. mit PostgreSQL und einer CSV-Datei, mit PostgreSQL und MySQL, mit PostgreSQL und Oracle, ...

          Also, bitte, in Zukunft nicht einfach pauschal schreiben, daß etwas nicht geht...
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            MS SQL kann das auch
            Code:
            SELECT a.Feld1, e.Feld2
            FROM Tabelle1 AS a INNER JOIN OPENROWSET('SQLOLEDB','192.168.10.1';'sa';'sa',tem pdb.dbo.Tabelle2) AS e ON a.FeldKey = e.Feldkey
            http://www.dhsmedia.de
            http://www.deutsch-im-blick.de

            Kommentar


            • #7
              https://dev.mysql.com/doc/refman/8.0...ge-engine.html

              Kommentar


              • #8
                Wenn man sich innerhalb der MySQL-Instanz bewegt funktioniert das auch.
                Allerdings hege ich auch Zweifel, dass es über eine Verbindungs-Resource, in der eine Datenbank explizit angegeben wird funktionieren soll bzw. jemals funktioniert hat.

                Ich habe das nicht getestet, aber falls das gehen sollte, bräuchtest Du die zweite Bindung nicht, denn es wird ja auch nur eine im mysqli_query() verwendet.
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche Tutorials

                Kommentar


                • #9
                  Zitat von Arne Drews Beitrag anzeigen
                  Wenn man sich innerhalb der MySQL-Instanz bewegt funktioniert das auch.
                  ...
                  Das funktioniert, auf Localhost getestet:
                  Code:
                  SELECT MitarbName, Vorname, PersNr, AbteilungBez FROM forum10112018.tbl_mitarbeiter AS A INNER JOIN dbkursexp.tbl_abteilung AS B ON A.AbteilungID_FK = B.AbteilungID
                  Aber was bedeutet dieser Satz:

                  Ich habe das nicht getestet, aber falls das gehen sollte, bräuchtest Du die zweite Bindung nicht, denn es wird ja auch nur eine im mysqli_query() verwendet.
                  Kannst du das bitte noch einmal ein wenig erläutern?

                  Kommentar


                  • #10
                    Zitat von Alf2016 Beitrag anzeigen
                    Das funktioniert, auf Localhost getestet
                    Du hast auf localhost zwei Datenbankserver laufen?

                    Kommentar


                    • #11
                      Zitat von hellbringer Beitrag anzeigen

                      Du hast auf localhost zwei Datenbankserver laufen?
                      Schau doch mal bitte richtig hin, wenn du Kommentare abgibst! Es bezog sich auf Arne Drews' Satz:
                      Wenn man sich innerhalb der MySQL-Instanz bewegt

                      Kommentar


                      • #12
                        Zitat von Alf2016
                        Kannst du das bitte noch einmal ein wenig erläutern?
                        PHP-Code:
                        $link1 mysqli_connect ("localhost""Name""passwort""db1");
                        $link2 mysqli_connect ("192.168.234.24""Name2""PW2""db2"); 
                        Du erstellst zwei Verbindungs-Resourcen, verwendest aber eh nur eine:
                        PHP-Code:
                        $sql mysqli_query($link2"SELECT * FROM db2.person p LEFT JOIN db1.teilnahme t ON t.ID_person=p.ID" ); 
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche Tutorials

                        Kommentar


                        • #13
                          Zitat von Arne Drews Beitrag anzeigen
                          PHP-Code:
                          $link1 mysqli_connect ("localhost""Name""passwort""db1");
                          $link2 mysqli_connect ("192.168.234.24""Name2""PW2""db2"); 
                          Du erstellst zwei Verbindungs-Resourcen, verwendest aber eh nur eine:
                          PHP-Code:
                          $sql mysqli_query($link2"SELECT * FROM db2.person p LEFT JOIN db1.teilnahme t ON t.ID_person=p.ID" ); 
                          Das funktioniert aber doch nicht, wenn db2 tatsächlich auf dem 2. Server, hier also 192.168.234.24 liegt. Also meinst du wohl in beiden Fällen, daß die beiden DBs auf der gleichen MySQL-Instanz liegen, also auf dem gleichen Server.

                          Somit dreht es sich bei deinen beiden letzten Beiträgen doch, wenn ich es richtig verstehe, um die Frage des TE im Sinne der Überschrift, wo erstmal nur von zwei Datenbanken die Rede ist, und nicht um den Fall, daß die dann auch noch auf verschiedenen Servern liegen. Richtig?

                          Kommentar


                          • #14
                            Ja genau, ich gehe ausschließlich davon aus, dass beide Datenbanken auf der selben Server-Instanz liegen.
                            Aber auch da kann ich nicht aus Erfahrung sagen, dass es gehen würde. Ich wollte nur darauf hinweisen, dass in dem Fall keine zwei Resourcen benötigt werden und generell fragwürdig ist, wie das jemals funktioniert hat.
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche Tutorials

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Ja genau, ich gehe ausschließlich davon aus, dass beide Datenbanken auf der selben Server-Instanz liegen.
                              Aber auch da kann ich nicht aus Erfahrung sagen, dass es gehen würde.
                              Zumindest auf dem Localhost geht es, s.o.

                              Das heißt aber nicht, daß ich hätte nachweisen können, daß es auf jedem Server geht. Z.B. auf einem von Strato zur Verfügung gestellten wie ich ihn für meine priv. Website benutze, würde es nicht gehen. Dort müssten die beiden DBs mit unterschiedlichen mysqli connections angesprochen werden. Gut Strato mag da kein gutes Beispiel sein...
                              Ich wollte nur darauf hinweisen, dass in dem Fall keine zwei Resourcen benötigt werden und generell fragwürdig ist, wie das jemals funktioniert hat.
                              Würde #6 von Kid01, falls getestet, nicht beweisen, daß es geht? Oder übersehe ich da was?

                              Kommentar

                              Lädt...
                              X