Verküpfung mehrerer Joins

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

  • #16
    dann poste mal deine test.tabellen incl. daten als phpMyAdmin export.

    ausserdem bitte die von dir angepasste query. denn mit tab1-3 kann ich ja dann nichts mehr anfangen
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #17
      momentchen ....

      Kommentar


      • #18
        tab1: forum_foren
        tab2: forum_threads
        tab3: forum_posts

        angepasst:
        Code:
        SELECT    T1.fid,
                  COUNT(T2.tid) CNT_TID,
                  COUNT(T3.pid) CNT_PID
        
          FROM    forum_foren T1
                    LEFT OUTER JOIN forum_threads T2 USING(fid)
                      LEFT OUTER JOIN forum_posts T3 USING(tid)
        
        GROUP BY  T1.fid
        Angehängte Dateien

        Kommentar


        • #19
          komisch. das macht doch meiner meinung nach genau das, was es soll.... oder?

          hier das ganze mal ohne counten.

          Code:
          SELECT    T1.fid,
                    T2.tid,
                    T3.pid
          
            FROM    forum_foren T1
                      LEFT OUTER JOIN forum_threads T2 USING(fid)
                        LEFT OUTER JOIN forum_posts T3 USING(tid)
          die ausgabe ist so wie die tabellen aufgebaut sind.

          hierbei habe ich jetzt wohl aber dein problem erkannt. du willst zu jeden forum die menge an threads haben und zu jeden thread die entsprechende menge an posts. richtig?

          wenn ich das richtig sehe, wirst du um unterabfragen nicht drumrum kommen. mit einer abfrage wird es nicht gehen. es sei denn du hast mysql 4.xx und kannst subselects machen.

          anders geht es leider nicht. also erst summe der threads pro forum ermitteln.
          Code:
          SELECT    T1.fid,
                    COUNT(T2.tid) CNT_TID
                    
            FROM    forum_foren T1
                      LEFT OUTER JOIN forum_threads T2 USING(fid)
          
          GROUP BY  T1.fid
          und dann bei der ausgabe-schleife pro thread-id jeweils einen count() für die posts machen.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #20
            noch ein tipp. FID ist in beiden tabellen nciht vom gleichen typ.

            INT(2) und INT(3)

            die typen sollten 1:1 identisch sein, wenn es sich um verknüpfungsfelder handelt, was sie nun mal sind....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #21
              hierbei habe ich jetzt wohl aber dein problem erkannt. du willst zu jeden forum die menge an threads haben und zu jeden thread die entsprechende menge an posts. richtig?
              Zu jedem Forum die Summe der Threads UND die summe der Posts (egal welcher Thread)

              mysql 4.1 leider sind die binaries noch nich da

              aber dein ergebnis ist sonst ok, nur eben jetzt noch gruppiert auf fid und gruppenfunktion count für die anderen spalten
              danke trotzdem, dachte es geht viellleicht irgendwie

              würde mich aber interessieren wie dieses board das macht

              PS: ja spaltentypen ... geändert
              Zuletzt geändert von graf; 19.03.2003, 23:05.

              Kommentar


              • #22
                Original geschrieben von graf
                Zu jedem Forum die Summe der Threads UND die summe der Posts (egal welcher Thread)
                ok. auch hier musst du eine unterabfrage machen. also in deinem fall eine weitere query pro forum.

                ich habe mal einen test gemacht für einen ein-query-variante, bin aber schon müde.....

                mache mal in die post-tabelle noch ein feld fid rein und bestücke es mit dem korrektem fid-wert.

                dann kannst du hiermir noch ein wenig spielen.

                Code:
                SELECT    F.fid,
                          COUNT(P.tid) CNT_TID,
                          COUNT(P.pid) CNT_PID
                
                  FROM    forum_foren F
                            LEFT OUTER JOIN forum_posts P USING(fid)
                
                GROUP BY  P.fid
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #23
                  fid in posts hab ich hinzugefügt ...

                  klingt dann ziemlich einfach, ist es aber nicht.

                  ich glaub ich warte auf die binaries von 4.1 und nehme dann das subselect

                  Kommentar


                  • #24
                    Original geschrieben von graf
                    ich glaub ich warte auf die binaries von 4.1 und nehme dann das subselect
                    oder du machst zwei abfragen. von der performance her wirds zwar etwas mehr aber es geht dann nicht anders.

                    besser noch....

                    nicht eine abfrage für thread und dann jeden menge zweite abfragen für die posts, sondern jeweils nur einmal. wenn du die werte in ein assoziatives array mit fid als key und ein subarray für die counts machst, sollte es auch sehr schnell sein.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #25
                      is auch ne möglichkeit und wird wahrscheinlich genauso schnell gehen, wie ein subselect, weil son subselect braucht ja auch seine zeit.

                      wenn 4.1 aber in den nächsten tagen kommt nehm ich das doch lieber, weil ich eigentlich sehr gern die db soviel wie möglich machen lasse.
                      ausserdem will ich eigentlich diesen "unnötigen" fremdschlüssel fid in posts nicht drin haben.

                      aber trotzdem nochmal danke für die denkarbeit

                      Kommentar


                      • #26
                        wenn die 4.1 kommt, wirst du sie aber noch nicht bei deinem hoster haben. oder?

                        oder willst du das nur zu hause machen, dann ist das natürlich absolut ok.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #27
                          zuhause
                          bis das projekt bereit für einen hoster ist, hat er 4.2

                          Kommentar


                          • #28
                            Original geschrieben von graf
                            zuhause
                            bis das projekt bereit für einen hoster ist, hat er 4.2
                            na dann...
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar

                            Lädt...
                            X