Select über zwei Tabellen

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

  • Select über zwei Tabellen

    Hallo,

    Ich habe eine Usertabelle und eine Relationstabelle in der die User mit einer Daten aus einer dritten Tabelle verbunden sind.
    Hintergrund ist, dass nur bestimmte User bestimmte Dateien sehen dürfen.

    Wenn ich jetzt ein Dateinamen anklicke würde ich gerne aus der Usertabelle alle User holen und gleichzeitig bei jedem Datensatz prüfen, ob der User die ausgewählte Datei sehen darf um diese dann
    zu markieren.

    Leider komme ich mit der SQL -Abfrage nicht ganz zurecht.

    Kann mir jemand vielleicht einen Denkanstoß geben??

    Danke vorab.

  • #2
    Zeig doch erstmal deine Ansätze! Hier hat keiner Lust alles von 0 an zu erzählen, dafür gibts den Sticky-Thread. Der ist Denkanstoß für alle.

    Kommentar


    • #3
      Re: Select über zwei Tabellen

      Original geschrieben von kakktus
      Kann mir jemand vielleicht einen Denkanstoß geben??
      stupps
      Kissolino.com

      Kommentar


      • #4
        Danke für den Stupps :-)

        Sieht jetzt so aus:

        PHP-Code:
        SELECT t_user.user_name t_user.user_id,  
        rel_user_data.data_name FROM t_user LEFT JOIN rel_user_data USING(user_id
        Klappt auch soweit. Nur so bekomme ich aus meine Relationstabelle alle data_namen würde aber gerne noch ein WHERE um nach einer bestimmten Datei zu suchen. --> WHERE rel_user_data.data_name = "test.mp3"<-- z.B.

        Aber wie muss ich das da noch unter bringen??
        Zuletzt geändert von kakktus; 01.09.2006, 17:17.

        Kommentar


        • #5
          Na, wie bringst du denn normal das Where unter. Bei nem JOIN ist es ganz genauso. (steht auch in dem Thread!)

          Warum fragst du erst, anstatt es zu probieren und dann zu sagen, was konkret nicht funktioniert?

          Kommentar


          • #6
            Danke für diese hilfreiche Antwort----

            Wenn ich es so mache:
            PHP-Code:
            SELECT t_user.user_name t_user.user_id,  rel_user_data.data_name FROM t_user 
            LEFT JOIN rel_user_data USING
            (user_idWHERE rel_user_data.data_name ='test.mp3' 
            bekomme ich aber wieder nur den oder die User ausgegeben, denen diese Datei zugeordnet ist. Ich möchte aber alle user haben und aus der Relationstabelle nur den einen Datensatz.

            Tut mir ja sehr leid wenn ich da gerade auf dem Schlauch stehe.
            Zuletzt geändert von kakktus; 01.09.2006, 17:17.

            Kommentar


            • #7
              Ja, was soll das denn jetzt, das sind ja zwei ganz verschiedene sachen:

              du willst alle(!) User auslesen
              SELECT * FROM usertabelle

              du willst den Datensatz zur datei 'test.mp3'
              SELECT * FROM dateitabelle WHERE data_name ='test.mp3'

              Da brauchst du kein JOIN.

              Falls auch das nicht das ist, was du willst, versuche es bitte nochmal zu erklären.

              EDIT:
              Und brich bitte deinen code UM!

              Kommentar


              • #8
                Also ich versuche es noch mal

                Ich möchte ein Select-Feld mit allen Usernamen füllen und gleichzeitig den oder die Usernamen vorselectieren die Das Recht haben die Datei test.mp3 zu sehen.

                Die Usernamen stehen in einer Tabelle und in der Relationstabelle stehen die UserIDs und die dazugehörigen Dateinamen. Eine Datei kann natürlich auch für mehrere User frei sein.
                Also müsste bei jedem User aus der Usertabelle abgefragt werden, ob es in der Relationstabelle seinen Namen mit der Datei test.mp3 gibt.

                Ich hoffe du verstehst mich jetzt ein wenig besser

                Geht das überhaupt mit einem Select??
                Zuletzt geändert von kakktus; 01.09.2006, 17:19.

                Kommentar


                • #9
                  Ich möchte ein Select-Feld mit allen Usernamen füllen und gleichzeitig den oder die Usernamen vorselectieren die Das Recht haben die Datei test.mp3 zu sehen.
                  sag das doch gleich!

                  Dann brauchst du den JOIN natürlich.
                  aber nur zwischen unser und der verbindungstabelle. (ich gehe man davon aus, dass du die datei nicht durch ihren namen, sondern durch ihre ID identifizierst.)

                  Die (fast) passende Query findest du sogar schon in unserem (happys) JOIN-Thread.

                  Kommentar


                  • #10
                    HI,

                    also eigentlich habe ich schon den Dateinamen als Schlüssel genommen und keine ID (ist das ein Problem??).


                    Die (fast) passende Query findest du sogar schon in unserem (happys) JOIN-Thread.
                    Naja den ganz Passenden habe ich leider noch nicht zusammen bekommen. Sonst hätte ich ja auch nicht gepostet

                    Naja werde am mir das Ganze am Montag noch mal in Ruhe anschauen ;-)
                    Trotzdem danke

                    Kommentar


                    • #11
                      also eigentlich habe ich schon den Dateinamen als Schlüssel genommen und keine ID (ist das ein Problem??).
                      Überleg mal bitte, warum die ID, ID heißt. Und dann Fragst du noch mal.

                      Kannst natürlich auch die 3. Tabelle Joinen, aber das macht ja nicht so den Sinn.

                      Kommentar


                      • #12
                        Original geschrieben von kakktus
                        Geht das überhaupt mit einem Select??
                        noch zwei Anstosse, es geht etwa so:

                        select user_name, (formel mit IS NULL ) AS user_darf_datei
                        from tabelle_users
                        left join tabelle_dateien
                        on tabelle_dateien.dateiname='datei.mp3'
                        and tabelle_users.user_name = tabelle_dateien.user_name

                        hier braucht es kein where. Die ='datei.mp3' Bedingung gehört ins ON des LEFT JOINs.

                        Version mit subselect:

                        select user_name, (formel mit IS NULL ) AS user_darf_datei
                        from tabelle_users
                        left join
                        (select * from tabelle_dateien
                        where tabelle_dateien.dateiname='datei.mp3') as tabelle_dateien
                        on tabelle_users.user_name = tabelle_dateien.user_name

                        Kommentar


                        • #13
                          Ah danke ich glaube jetzt fällt der Groschen langsam

                          Werde es Montag testen. Danke!

                          Kommentar

                          Lädt...
                          X