Userliste über 2 Tabellen

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

  • Userliste über 2 Tabellen

    Hallo alle zusammen,

    ich bin recht neu hier und auch PHP ist mir eher neu. Daher gleich ma ne Frage. Sie hat momentan mehr mit SQL zu tun.

    Ich möchte ein Variable aus (blöderweise) zwei Tabellen "befüllen". Nur weiß ich nicht wie ich das machen soll.

    In der erstn Tabelle sind die meisten Daten schön, ein Benutzer nach dem anderen, drin und die such ich mir so raus:

    PHP-Code:
    $result $db->query("SELECT user.userid,user.username,user.points,user.onlinetime,user.lastaction, user.sessionid AS sessionid, user.userpage AS userpage, 
    user.birthday FROM "
    .$db_tblpre."user user $where ORDER BY $sortby $order LIMIT".$elm_pp*($page-1).",".$elm_pp); 
    Die Sortierung ist hier mal nicht wichtig glaube ich.

    Nun das Problem. In meiner zweiten Tabelle sind noch Daten zum Benutzer drin, die aber nicht hintereinander stehen

    sondern nur nach userid sortiert sind, wobei jeder userid noch mehrere feldid's vorhanden sind. Im Klartext: ich habe eine Userid aus der ersten Tabelle und suche für diese Userid in der zweiten Tabelle noch eine die passende

    Zeile in der die feldid beispielsweise "2" ist und will dann den Wert dieser Zeile für die Spalte "value" an mein $result dran hängen. Verwirrend genug?
    Das große Problem ist für mich, dass ich diese Querys nicht nacheinander ausführen will, weil ich dann jedesmal im
    $result ja die passende Zeile suchen muß um den value anzuhängen.
    Wenn ich das jetzt so schreibe wäre das evtl doch dich einfachere Lösung, oder?

  • #2
    Stichwort "Joins"

    du musst eine verknüpfung mit beiden Tabellen herstellen! wie das geht?

    user.userid = fremdetabelle.NameDesForeignkeys

    und das muss dann in die WHERE klausel!

    Für mehr Infos schau mal im Thread "Joins das leidige Thema"
    Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
    - ...und solche Behauptungen in "falsches Resourcenmanagement"

    Kommentar


    • #3
      Re: Userliste über 2 Tabellen

      Original geschrieben von Zumlin
      PHP-Code:
      $result $db->query("SELECT user.userid, user.username, user.points, user.onlinetime,
      user.lastaction, user.sessionid AS sessionid, user.userpage AS userpage, user.birthday 
      FROM "
      .$db_tblpre."user user $where ORDER BY $sortby $order LIMIT".$elm_pp*($page-1).",".$elm_pp); 
      PHP-Code:
      $result $db->query("SELECT user.userid, user.username, user.points, user.onlinetime,
      user.lastaction, user.sessionid AS sessionid, user.userpage AS userpage, user.birthday 
      LEFT JOIN tabelle2 userinfo ON userinfo.userid=user.userid 
      FROM "
      .$db_tblpre."user user $where ORDER BY $sortby $order LIMIT".$elm_pp*($page-1).",".$elm_pp); 
      so ungefähr... Nun KÖNNTE es aber zu doppelten Einträgen kommen, wenn in quell und zieltabelle spalten mit dem gleichen namen vokommen. Da müsstest du dann deine Liste der Feldnamen gezielt erweitern; user.birthday, userinfo.strasse, userinfo.ort usw

      Hope it helps

      Kommentar


      • #4
        Original geschrieben von zerni
        Stichwort "Joins"
        du musst eine verknüpfung mit beiden Tabellen herstellen! wie das geht?
        user.userid = fremdetabelle.NameDesForeignkeys
        und das muss dann in die WHERE klausel!
        @zumlin: Hör besser nicht darauf. Ein Join gehört NICHT in die Whereklausel! In die Whereklausel kommen filter, die die auszugebenden Daten einschränken.

        ein JOIN (oder auch zwei, drei, vier...) gehört VOR die where-klausel.

        Kommentar


        • #5
          was zerni sagt, würde auch funktionieren (je nach tabellenstruktur; habe den eingangspost nicht gelesen). nur ist es dann keine verknüprfung der daten mittels JOIN.

          Kommentar


          • #6
            So hab das mal ausprobiert, aber geht wie erwartet antürlich nicht beim ersten Versuch. Wär ja mal was ganz neues

            Ich beschreib jetzt einfach mal die Tabellen genauer:

            db1doc_profile_field_value:

            wertid--userid--feldid--value
            1--------2--------1
            2--------2--------2-------0
            3------- 2 --------3
            4 -------2 --------4
            5 -------2 --------5
            6 -------2-------- 6
            7 -------3-------- 1
            8------- 3 --------2-------1
            9------- 3-------- 3
            10------ 3 --------4
            11------ 3 --------5
            12------ 3 --------6


            db1doc_user:

            userid username passwort sessionid ip usergroup jointime lastlogin lastlogout currentaction failedlogins lastaction accesslock points posts avatarid specialtitel speciallevel email birthday website signature userpage pmcount onlinetime timezone dateformat timeformat styleid

            1 guest d41d8cd98f00b204e9800998ecf8427e 1 1170875635 1170875635 1170875635 0 1170875635 0 0 0 0 0 0000-00-00 0 0 +1 %d.%m.%Y %H:%M 1

            (Zum Beispiel)


            Mein Select Befehel:

            PHP-Code:
            $result $db->query("SELECT user.userid, user.username, user.points, user.onlinetime,user.lastaction, user.sessionid AS sessionid, user.userpage AS userpage,user.birthday, additional.value AS gender 
            FROM "
            .$db_tblpre."user user 
            LEFT OUTER JOIN "
            .$db_tblpre."profile_field_value additional 
            ON additional.userid=user.userid AND additional.feldid=2 "

            $where." ORDER BY ".$sortby." "$order." LIMIT ".$elm_pp*($page-1).",".$elm_pp); 
            LEFT OUTER JOIN daher, da ich auch die Daten der user brauchen die kein Geschlecht angegeben haben.

            Die Fehlermeldung:

            Fehler:Unknown column 'additional.gender' in 'field list'
            Ich kenn mich da echt nicht mehr aus. Irgendwie stimmen meine Bezeichnungen nicht, oder?

            PS: Entschuldigt die schlechte Darstellung der Tabellen aber ich kann hier anscheinend keinen HTML Code einfügen.
            Zuletzt geändert von Zumlin; 19.02.2007, 16:26.

            Kommentar


            • #7
              Man bin ich blöd. War natürlich einfach ein Tippfehler.

              additional.gender muß natürlich additional.value heißen. Danke für eure Tipps.

              Kommentar

              Lädt...
              X