Phil: Mit MySQLi mehrere Tabellen auslesen

Hallo zusammen

Ich möchte gerne mit MySQLi Daten aus 2 verschiedenen Tabellen auslesen. Der Code funktioniert nur mit einer Tabelle, sobald ich eine Zweite angebe erscheint folgende Fehlermeldung: "call to a member function fetch_assoc() on a non-object"

Danke für Eure Hilfe.

  
...  
$sql = "SELECT * FROM `fahrer` AS f, `teams` AS t WHERE t.fahrer1 = f.name order by punkte DESC";  
$ergebnis = $db->query($sql);  
  
while($zeile = $ergebnis->fetch_assoc())  
{  
...etwas tun  
);  
...  

  1. Hi,

    Ich möchte gerne mit MySQLi Daten aus 2 verschiedenen Tabellen auslesen. Der Code funktioniert nur mit einer Tabelle, sobald ich eine Zweite angebe erscheint folgende Fehlermeldung: "call to a member function fetch_assoc() on a non-object"

    Das ist ein Folgefehler, weil du versuchst auf ein Abfrageergebnis zuzugreifen, das gar nicht existiert - weil die Abfrage schief ging.

    Nutze mysqli->error, um herauszufinden, was die Datenbank an deiner Abfrage nicht mochte.

    Das sind übrigens absolute Debugging-Basics.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Danke für Eure Hilfe.

      Folgende MySQLi Fehlermeldung erhalte ich: Column 'punkte' in order clause is ambiguous

      Ich vermute das hat damit zu tun, dass die Spalte Punkte in beiden Tabellen vorkommt?

      1. Hello,

        Folgende MySQLi Fehlermeldung erhalte ich: Column 'punkte' in order clause is ambiguous

        Ich vermute das hat damit zu tun, dass die Spalte Punkte in beiden Tabellen vorkommt?

        Der Kandidat hat zwei Punkte und erhält dafür 100 :-)

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Danke.

          Gibt es hierfür eine Lösung ohne auf den * verzichten zu müssen?

          1. Hello,

            Gibt es hierfür eine Lösung ohne auf den * verzichten zu müssen?

            Wie jetzt? *?

            Du musst deiner Datenbank sagen, aus welcher Tabelle Du die Punkte sehen willst bzw. danach sortieren willst. Willst du "order by t.punkte" oder willst Du "order by f.punkte"?

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
      2. Hi!

        Folgende MySQLi Fehlermeldung erhalte ich: Column 'punkte' in order clause is ambiguous
        Ich vermute das hat damit zu tun, dass die Spalte Punkte in beiden Tabellen vorkommt?

        Dann musst du es eindeutig spezifizieren. Alternativ gingen auch eindeutige Aliasnamen oder die Spaltennummer wie in der Select-Klausel aufgelistet als Argument für ORDER BY. Beides macht sich mit dem Verzicht auf das * und der expliziten Aufführung der gewünschten Spalten besser.

        Lo!

  2. Hello,

    Ich möchte gerne mit MySQLi Daten aus 2 verschiedenen Tabellen auslesen. Der Code funktioniert nur mit einer Tabelle, sobald ich eine Zweite angebe erscheint folgende Fehlermeldung: "call to a member function fetch_assoc() on a non-object"

    Danke für Eure Hilfe.

    ...
    $sql = "SELECT * FROM fahrer AS f, teams AS t WHERE t.fahrer1 = f.name order by punkte DESC";
    $ergebnis = $db->query($sql);

    hier fehlt die Kontrolle, ob $ergebnis überhaupt ein Objekt geworden ist, also die Query erfolgreich war.
    [link:http://de2.php.net/manual/en/mysqli.query.php]
    "... returns false on failure ..."

    Und dann kannst Du dir die SQL-Fehlermeldung ansehen

    [link:http://de2.php.net/manual/en/mysqli.error.php]

    while($zeile = $ergebnis->fetch_assoc())
    {
    ...etwas tun
    );
    ...

      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>