Zwei Tabellen verknüpfen

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

  • Zwei Tabellen verknüpfen

    Hallo Leute ,

    Ich habe zwei tabellen, einmal "photoalbums" und einmal "photos".

    photoalbums:

    album_id | album_name
    ---------------------------------------
    1 | Test Album
    2 | Urlaub


    photos:

    photo_id | album_id | photo_path
    -----------------------------------------------------
    1 | 1 | test.jpg
    2 | 1 | ich.jpg
    3 | 2 | meer.jpg


    So, nun möchte ich in einer tabelle ausgeben, wieviele fotos sich in den alben befinden.
    Habe das mal so versucht, leider ohne erfolg.

    Code:
    SELECT t1.* , COUNT(t2.*) as anzahl FROM photoalbums t1 
    LEFT JOIN photos t2 ON t1.album_id = t2.album_id 
    WHERE t1.user_id = '" . $session_data['user_id'] . "'"
    Danke im Voraus.

    mfg tom
    OffTopic:
    zeilenumbrüche spendiert von kropff
    Zuletzt geändert von Kropff; 20.02.2008, 09:35.

  • #2
    Du brauchst GROUP BY wenn du mehr Spalten als die COUNT Spalte abfragen willst.
    Habe das mal so versucht, leider ohne erfolg.
    Eine genaue Fehlerbeschreibung wäre toll.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Hallo und danke,

      Habs jetzt mal so gemacht:

      Code:
      "SELECT t1.*, t2.*, COUNT(*) as test FROM photoalbums t1 
      LEFT JOIN photos t2 ON t1.album_id = t2.album_id 
      GROUP BY t2.album_id"
      Leider leifert mir das nicht das ergebnis das ich möchte

      Danke, mfg tom
      OffTopic:
      zeielenumbrüche spendiert von kropff
      Zuletzt geändert von Kropff; 20.02.2008, 09:35.

      Kommentar


      • #4
        Versuch mal
        PHP-Code:
        SELECT p.album_idCOUNT(*) 
         
        FROM 
          photos p

          
        photoalbums a 
         WHERE 
          p
        .album_id a.album_id 
         GROUP BY p
        .album_id 
        Zuletzt geändert von krel; 18.02.2008, 23:21.

        Kommentar


        • #5
          Hey,

          Also so funktionierts annähernd:

          Code:
          "SELECT t1.*, t2.album_id, COUNT(*) as count_photos_in_album FROM photoalbums t1 
          LEFT JOIN photos t2 ON t1.album_id = t2.album_id 
          AND t1.user_id = t2.user_id 
          WHERE t1.user_id = 1 
          GROUP BY t2.album_id ORDER BY t1.album_id DESC LIMIT 10"
          Nur ein kleinen problem gibt es noch.
          Wenn sich in der tabelle "photos" keine photo zum passenden album befindet, dann hat die var "count_photos_in_album" trotzdem den wert 1.

          Wenn sich dann ein photo zum passenden album in der Tabelle befindet, hat die var "count_photos_in_album" auch 1(ist auch richtig so).

          dann bei 2, 3, 4, ... gibt er alles korrekt an.

          Danke mfg,
          tom
          OffTopic:
          zeilenumbrüche spendiert von kropff
          Zuletzt geändert von Kropff; 20.02.2008, 09:34.

          Kommentar


          • #6
            Dann überprüfe doch ob Fotos für das jeweilige Album vorhanden sind. Oder du setzt den Wert direkt auf null. Die Reihe 0 wird ja trotzdem mitgezählt oder irre ich mich da?

            Kommentar


            • #7
              1. Brich doch bitte deinen Code um, ist ja unerträglich diese Scrollerei.
              2. Wenn du eine GRUOP BY-Klausel in einer Abfrage hast, sollten (bei den meisten RDBMS's müssen) alle abgefragten Attribute auch in der GROUP BY-Klausel stehen. Für alle nicht direkt 1:1 vom Gruppenbegriff abhängigen Attribute erhälst du sonst Zufallswerte. Woher soll die DB auch wissen, welches Bild aus Album 1 du zum entsprechenden Zähler haben willst? Wenn du also nach Album gruppierst, macht neben der Album-ID höchstens noch die Ausgabe des zugehörigen Albumnamens Sinn.
              3. Wenn du COUNT(*) im Zusammenhang mit einem LEFT JOIN benutzst, so wird zuerst immer mal das Album gezählt, und das ist natürlich vorhanden, auch wenn es leer ist
              4. Die doppelte Beziehung über album_id und user_id ist m.E. sinnlos
              Gruss
              H2O

              Kommentar


              • #8
                Hey,

                Wenn du COUNT(*) im Zusammenhang mit einem LEFT JOIN benutzst, so wird zuerst immer mal das Album gezählt, und das ist natürlich vorhanden, auch wenn es leer ist
                Genau das ist da Problem,
                gibt es da eine ellegante Lösung dafür?

                Danke, mfg tom

                Kommentar


                • #9
                  Solange du deinen Code nicht umbrichst nicht! (Button ändern)
                  Gruss
                  H2O

                  Kommentar


                  • #10
                    @ts

                    ich habe mir jetzt mal die mühe gemacht, deine endlos-querries zu umbrechen. ab sofort machst du das selber
                    daher * verwarn *

                    btw: sql-abfragen kann man auch so schreiben.

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      Ok, dann kann ich ja die Frage beantworten: Statt
                      PHP-Code:
                      LEFT JOIN 
                      schreibst du
                      PHP-Code:
                      INNER JOIN 
                      und schon stimmt der Zähler
                      Gruss
                      H2O

                      Kommentar


                      • #12
                        Hey H2O,

                        Danke,.... Aber
                        Leider stimmt deine Antowrt nicht.

                        Nun werden die Alben selbst nicht mehr gezählt.

                        Danke,

                        mfg

                        Kommentar


                        • #13
                          wie die Alben selber, du willst doch die Photos pro Album zählen oder nicht?

                          Kommentar


                          • #14
                            hey,

                            also ich will auf einer seite die alben anzeigen, und dabei soll in klammer die anzahl der photos in diesem album stehen.

                            ich will das mit einem query realisieren.

                            danke

                            mfg tom

                            Kommentar


                            • #15
                              Re: Zwei Tabellen verknüpfen

                              Original geschrieben von tomtitom
                              So, nun möchte ich in einer tabelle ausgeben, wieviele fotos sich in den alben befinden.
                              Original geschrieben von tomtitom Leider stimmt deine Antowrt nicht.
                              Ich finde es ziemlich arrogant, die Frage zu verändern und nachher zu behaupten die Antwort sei falsch!
                              Wenn du halt die leeren Alben auch haben willst, dann zähle die Fotos, und nicht die Einträge, etwa so (ungetestet):
                              PHP-Code:
                              SELECT 
                                  a
                              .album_id,
                                  
                              a.album_name,
                                  
                              COUNT(f.foto_id) as count_photos_in_album 
                              FROM 
                                  photoalbums a
                              LEFT JOIN 
                                  photos f USING
                              (album_id
                              WHERE 
                                  t1
                              .user_id 
                              GROUP BY 
                                  t2
                              .album_id 
                              ORDER BY 
                                  t1
                              .album_id 
                              Gruss
                              H2O

                              Kommentar

                              Lädt...
                              X