2 Tabellen verbinden - logisches Problem

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

  • 2 Tabellen verbinden - logisches Problem

    Hiho zusammen,

    Zur Zeit programmiere ich ein kleines Projekt, was es Usern ermöglicht Interessengruppen anzulegen in die andere Eintreten können.

    Soweit steht alles, ich habe nur 1 Problem:

    Wenn man nach einer Gruppe sucht, soll schon bei der Anzeige der Gruppe dabei stehen, ob man dieser Gruppe bereits angehört (Usability )

    Tabelle 1 enthält:
    id (Gruppenid)
    uid (Besitzer-Id)
    und halt beschreibung etc

    Tabelle 2 enthält die User und die Gruppe der sie angehören:
    id (Eintrag Id),
    gid (Gruppen Id),
    uid (nutzer)

    "
    SELECT groups.id,groups.name,groups.note,groupuser.uid FROM groups
    WHERE name like '%".$_POST["string"] . "%'
    OR note like '%".$_POST["string"] . "%'
    " - Ohne Gruppenzugehörigkeit

    Ich komme wirklich nicht drauf, wie man die beiden Tabellen so verbinden kann, dass man die Suche nach der Gruppe mit dem Inhalt "string" mit der Überprüfung der Gruppenzugehörigkeit in eine SQL Abfrage packen kann.

    Ich könnte das Problem mit einer zweiten SQL abfrage lösen, die Prüft ob der User der Gruppe angehört, aber bei 10 Gruppen hieße das 10 SQL Abfragen pro Seitenaufbau, das erscheint mir zuviel zu sein.

    Sollte jemand eine Idee7Anregung haben, wäre ich sehr dankbar.

    Ja, ich kenen JOIN's, aber ich kome grad ganz einfach auf keine Sinnvolle verknüpfung-.

    Grüße
    Dennis
    Zuletzt geändert von norodon; 18.04.2008, 15:48.

  • #2
    Ich vermute, du suchst das:
    Code:
    SELECT 
    	g.id,
    	g.name,
    	g.note,
    	u.uid 
    FROM 
    	groups g
    INNER JOIN 
    	groupuser u ON g.id = u.gid
    WHERE 
    	g.name = '" $_POST['string'] . "'"
    AND
    	u.uid = $userid;
    Wenn etwas gefunden wird, gehört der Benutzer (woher du die $userid nimmst, musst du selber wissen) der Gruppe an, sonst nicht.
    Gruss
    H2O

    Kommentar


    • #3
      Hallo,

      Ich würde dir einen Left-Join empfehlen.

      Code:
      SELECT DISTINCT G.id, G.name, G.note, GU.gid 
      FROM groups AS G
      LEFT OUTER JOIN groupuser AS GU ON G.id = GU.gid 
      WHERE name like '%".$_POST["string"] . "%'
        OR note like '%".$_POST["string"] . "%'
      So, nun kannst du in php mit is_null überprüfen, ob GU.gid null ist oder nicht. Ist es NULL so ist er noch nicht in der Gruppe, ansonsten schon..



      EDIT:
      @H2O: Ich glaube er will die Gruppe auch haben, wenn der user nicht drin ist..
      signed oder unsigned... das ist hier die Frage

      Kommentar


      • #4
        Danke an Beide für ihre Antworten

        @Case

        Dein Ansatz war genau das was ich gesucht habe.

        "SELECT DISTINCT " und "X as X" kenne ich nicht, werde ich mir aber gleich mal ansehen.


        Danke vielmals ^^

        Kommentar


        • #5
          Aber auf den user musst du trotzdem abfragen, sonst ist di GU.gid nicht null, sobald irgendein Benutzer in der Gruppe ist.
          Gruss
          H2O

          Kommentar


          • #6
            Eine Person ist immer in der Gruppe, der Gründer nämlich.

            So, habe jetzt mal ein wenig damit rummgespielt und das Problem ist, dass er manche Gruppen doppelt ausgibt, sobald mehrer Leute drinne sind.




            id name note gid uid owner
            19 TEST TEST 19 17 0
            19 TEST TEST 19 18 1


            Gibt es da eine elegante Methode das zu ändern?

            --- Edit: ---

            Das Problem liegt natürlich am Feld "owner" und "uid", SQL dieses nicht ohne Datenverlust zusammenführen kann, evtl muss ich das Rausnehmen und es anders lösen

            Zuletzt geändert von norodon; 18.04.2008, 20:06.

            Kommentar


            • #7
              wie schaut dein Query denn mittlerweile aus?

              die uid brauchst du doch eigentlich nicht oder? nimm die mal raus und dann sollten mit einem Distinct alle Datensätze nur noch einmal ausgegeben werden..
              signed oder unsigned... das ist hier die Frage

              Kommentar


              • #8
                PHP-Code:
                $query="SELECT DISTINCT groups.id,groups.uid, groups.name, groups.note, groupuser.gid  
                FROM groups AS groups  
                LEFT OUTER JOIN groupuser AS groupuser 
                ON groups.id = groupuser.gid   
                WHERE name like '%" 
                $_POST["string"] . "%' OR note LIKE '%" $_POST["string"] . "%'" 
                Zur Zeit ist der Aufruf nicht sehr sinnvoll für mich, da ich nicht schauen kann ob ein User der Besitzer oder ein Mitglied oder nichts von beidem ist.

                Die Gruppen.UID brauche ich, um zu schauen ob es der Besitzer ist und die GruppenUser.UID brauche ich um zu schauen, ob der Benutzer bereits in der Gruppe ist.

                Überlege, wie ich evtl auch die Tabellen ändern könnte, wenns nicht anders geht.

                Zuletzt geändert von norodon; 18.04.2008, 23:00.

                Kommentar


                • #9
                  PHP-Code:
                  $query "
                      SELECT DISTINCT 
                          g.id,
                          g.uid, 
                          g.name, 
                          g.note, 
                          IFNULL(u.gid, 0) member,
                          IF(g.uid = 
                  $user, 1, 0) owner
                  FROM 
                      groups AS g
                  LEFT OUTER JOIN 
                      groupuser u ON g.id = u.gid   
                  WHERE 
                      name like '%" 
                  $_POST["string"] . "%' 
                  OR 
                      note LIKE '%" 
                  $_POST["string"] . "%'"
                  Gruss
                  H2O

                  Kommentar

                  Lädt...
                  X