Problem mit dem abfragen mehrer Tabellen (JOINS)

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

  • Problem mit dem abfragen mehrer Tabellen (JOINS)

    Hallo miteinander,

    ich hab ein problem mit dem abfragen mehrer Tabellen (JOINS). Ich hab über
    euer Tutorial "MySQL für Anfänger einfach erklärt" herausgefunden wie das
    mit dem JOINS funktioniert (wenn ich mit der userid suche funktioniert es
    auch nur nicht wenn ich die userid suche).

    Zur Erklärung:
    Ich hab 4 Tabellen users, statusdr, statuset und statuspi

    in der Tabelle users stehen die: userid, uservname, usernname, usw....
    in der Tabelle statusdr stehen die: statusid, status, fuserid, usw...
    die Tabellen statuset und statuspi sind genau wie die Tabelle statusdr
    aufgebaut. Der Status in den 3 Tabellen besteht aus einer Zahl 1 bis 5.
    Jeder Benutzer kann nur jeweils in einem Status sein.

    Wenn ich nun mit den userid's suche bekomme ich ein Ergebniss das fast stimmt
    es werden auch Benutzer angezeigt die keinen Status haben:
    Code:
    SELECT *
    FROM users
    LEFT JOIN statusdr ON users.userid=statusdr.fuserid
    LEFT JOIN statuset ON users.userid=statuset.fuserid
    LEFT JOIN statuspi ON users.userid=statuspi.fuserid
    Nun hätte ich gern eine Liste in der von oben nach unten alle Statuse
    aufgeführt sind und unter dem jeweiligen Status die Benutzer stehen:

    Status 1
    Benutzer 12
    Benutzer 16

    Status 2
    Benutzer 1
    Benutzer 2

    Status 3

    Status 4

    Status 5
    Benutzer 5

    und hier komm ich nicht mehr weiter.

    thanx schon mal jetzt für eure hilfe

    MFG
    cali-mero

  • #2
    Hallo,

    Zitat von cali-mero Beitrag anzeigen
    bekomme ich ein Ergebniss das fast stimmt
    es werden auch Benutzer angezeigt die keinen Status haben
    Wenn dich das stört, nimm einen inner Join (ohne left, also nur „JOIN“).

    Zitat von cali-mero Beitrag anzeigen
    Nun hätte ich gern eine Liste in der von oben nach unten alle Statuse
    aufgeführt sind und unter dem jeweiligen Status die Benutzer stehen
    Sowas gibt es nicht, aber das kannst du dann mit PHP zurechtbasteln. Dieses Vorgehen nennt man Gruppenwechsel.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 14.07.2010, 19:48.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo,

      danke für den Tipp ich habs jetzt so gelöst:

      PHP-Code:
      <?php

      require("./config.inc.php");


      $sql "TRUNCATE TABLE `tmp`";
      mysql_db_query($dbname$sql);

      $sql "INSERT INTO tmp (statusid, userid)\n"
          
      "SELECT fstatusid, fuserid FROM statusdr\n"
          
      "WHERE statusdr.fstatusid > 0";
      mysql_db_query($dbname$sql);

      $sql "INSERT INTO tmp (statusid, userid)\n"
          
      "SELECT fstatusid, fuserid FROM statuset\n"
          
      "WHERE statuset.fstatusid > 0";
      mysql_db_query($dbname$sql);

      $sql "INSERT INTO tmp (statusid, userid)\n"
          
      "SELECT fstatusid, fuserid FROM statuspi\n"
          
      "WHERE statuspi.fstatusid > 0\n";
      mysql_db_query($dbname$sql);

      $sql "SELECT tmp.statusid, tmp.userid, user.firstname, user.lastname\n"
          
      "FROM tmp\n"
          
      "LEFT JOIN user ON tmp.userid=user.userid\n"
          
      "ORDER BY tmp.statusid LIMIT 0, 30 ";



      $resultat mysql_db_query($dbname$sql);

      while (
      $row mysql_fetch_array($resultat)) {
      extract($row);    
          
      echo 
      "
      <table border=1 width=200px>
      <tr>
          <td>Status 
      $statusid</td>
          <tr></tr>
      </tr>

      <tr>
          <tr><br></tr>

          <td>
      $firstname $lastname</td>
      </tr>
      "
      ;

      }

      echo 
      "</table>";
      ?>
      das Script ist mit sicherheit nicht ganz perfekt so erfüllt aber seinen
      Zweck.

      MFG
      cali-mero

      Kommentar


      • #4
        bist du sicher, dass du das

        echo "<table blabla>" IN der letzten while-Schleife haben willst ... das sieht viel "hübscher" davor aus ^^
        [font=Verdana]
        Wer LESEN kann, ist klar im Vorteil!
        [/font]

        Kommentar

        Lädt...
        X