Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] msqli - 2 Tabellen miteinander vergleichen und Unterschiede ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] msqli - 2 Tabellen miteinander vergleichen und Unterschiede ausgeben

    Hallo,

    ich bin neu hier und versuche mir gerade php5 als Autodidakt beizubringen - blutiger Anfänger.

    Ich habe 2 Datenbanktabellen. Die userIDs sind in beiden grundsätzlich identisch, jedoch beinhaltet eine Tabelle verwaiste Einträge und userIDs. Diese möchte ich mir anzeigen lassen. Der DB-Zugriff soll über mysqli erfolgen, was auch alles funktioniert.

    Meine Idee war nun die beiden Datenbanken wie folgt zu vergleichen:

    PHP-Code:
    $vergleich_userID $mysqli_connect_db->query("SELECT userID,
    FROM db1 WHERE (userID) NOT IN (SELECT userID FROM db2)"
    );

        
    $differenz $vergleich_userID
    Mein Problem ist nun, dass $differenz nur einen boolschen Wert beinhaltet. Der Wert = 1, d.h. es gibt einen Unterschied.

    Ich möchte mir nun aber die konkreten userIDs ausgeben lassen, die in der verwaisten Tabelle überzählig sind. Wie mache ich das am besten?

    Ich hoffe meine Frage ist verständlich. Bitte fragt ggf. nach.

    Vielen Dank & Grüße
    CCFF


  • #2
    Ja du hast also ein Ergebnis und den Datensatz musst du dir ja jetzt noch zurück geben lassen. Z.B. mit mysqli_fetch_object(). Ich gebe dir auch gleich mal einen Link dazu.

    http://www.peterkropff.de/site/php/mysqli_methoden.htm

    Kommentar


    • #3
      Doku lesen:

      mysqli::query
      Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
      Wenn du die Ids willst, musst du diese auch noch aus dem Object ziehen.
      Das bewerkstelligst du mit den "mysqli_result::fetch_*" Methoden, in deinem Fall wäre "mysqli_result::fetch_all" die Lösung.

      Mein Problem ist nun, dass $differenz nur einen boolschen Wert beinhaltet. Der Wert = 1, d.h. es gibt einen Unterschied.
      Diese Herleitung basiert auf falsch interpretieren Fakten.

      Damit sei dir Debugging:Leitfaden ans Herz gelegt.

      Kommentar


      • #4
        Hallo,

        erst mal vielen Dank für eure Hinweise und Tipps. Ich habe versucht das ganze zu verstehen und ich denke auch ich habe es verstanden, trotzdem komme ich nicht weiter.

        Wenn ich folgende SQL Abfrage direkt in phpMyAdmin mache, dann bekomme ich genau das gewünschte Ergebnis (die verwaisten Datensätze werden mit ID angezeigt):

        PHP-Code:
        SELECT `userIDFROM datenbank2 WHERE (`userID`) NOT IN (SELECT `userIDFROM datenbank1
        Wenn ich das ganze via php machen möchte, dann bekomme ich weiterhin den Fehler:
        Fatal error: Call to a member function execute() on boolean in Zeile - bei Aufruf $stmt_unterschied->execute();

        Den Aufbau zur DB habe ich weggelassen; der funktioniert einwandfrei. Die Tabellenspalten heißen auch userID und werden genau so geschrieben - sonst würde ja auch der Aufruf in phpMyAdmin nicht funktionieren.

        PHP-Code:
        $mysqli_unterschied $mysqli_connect_zur_Datenbank;
        $query_unterschied "?";
        $stmt_unterschied $mysqli_unterschied->prepare($query_unterschied);
        $stmt_unterschied->execute();    

        $query_unterschied = ("SELECT userID FROM datenbank2 WHERE (userID) NOT IN (SELECT userID FROM datenbank1");

        if (
        $result $mysqli->query($query_unterschied)) 
                {
                  while (
        $row $result->fetch_assoc()) 
                  {
                    
        print_r ("%s (%s)\n"$row["userID"]);
                  }
                   
        $result->free();
            } 
        Hat jemand einen Tipp?

        Vielen Dank & Grüße
        CCFF
        Angehängte Dateien

        Kommentar


        • #5
          Zitat von CCFF Beitrag anzeigen
          PHP-Code:
          $mysqli_unterschied $mysqli_connect_zur_Datenbank;
          $query_unterschied "?";
          $stmt_unterschied $mysqli_unterschied->prepare($query_unterschied);
          $stmt_unterschied->execute(); 
          Was genau versprichst du dir davon einen Query der nur aus einem Fragezeichen besteht auszuführen? Lass den Teil doch einfach weg ... Und: wenn eine MySQL-Funktion fehlschlägt sagt sie idR nicht wo das Problem liegt, du musst sie schon nach der Fehlermeldung fragen.

          Kommentar


          • #6
            Hallo,

            habe das ganze jetzt wie folgt gelöst:

            PHP-Code:
            $query_unterschied_userID = ("SELECT `userID` FROM tabelle1 WHERE (`userID`) NOT IN (SELECT `userID` FROM tabelle2)");

            if (
            $result_unterschied_userID $mysqli_connect_db->query($query_unterschied)) {
                
            $row_num $result_unterschied->num_rows;
                
            // print_r ($result_unterschied);
                
            if ($row_num == 0) {
                    echo 
            "Keine UserID-Inkonsistenz in tabelle2 gefunden";
                    }
                elseif (
            $row_num 0) {
                echo 
            "<br /><b>ACHTUNG: folgende UserIDs sind in tabelle2 nicht vorhanden - Datenbanktabellen abgleichen:</b>";
                while(
            $row_unterschied $result_unterschied->fetch_object()) {
                    
            // print_r ($row_unterschied);
                    
            foreach($row_unterschied as $zeige_userID)
                          echo 
            "<br />" $zeige_userID,"";
                    }
                }

            Grüße
            CCFF

            Kommentar

            Lädt...
            X