[MSSQL] Neue Beiträge Funktion für Forum(LEFT OUTER JOIN)

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

  • [MSSQL] Neue Beiträge Funktion für Forum(LEFT OUTER JOIN)

    HalliHallo...

    Ich habe da seit einigen Tagen ein Problem...ich will mir neue Beiträge anzeigen lassen im meinen Forum....mir wurde gesagt das geht mit LEFT OUTER JOIN...

    Ich sitze jetzt seit ca 3 tagen täglich 1-1 1/2 stunden dran um das Problem zu lösen, habe Tutorials gewälzt und in Suchfunktionen gestöbert, in Büchern gelesen, und probiert und probiert, es will einfach nicht...

    Ich will hoffen ich kriege hier endlich ne Lösung...

    Folgendes:
    Ich habe 2 Tabellen `forum_threads` und `user_reads` in der `user_reads` werden die User-IDs gespeichert + die Forum-IDs....

    Jetzt möchte ich alle ids(einträge) von `forum_threads` angezeigt bekommen die kein gegenstück in den `user_reads` haben, sprich alle IDs die nicht in `user_reads` stehen.....

    So schwer kanns doch nicht sein, ich kriegs trotzdem nicht hin -.-

    Bitte keine Links zu Tutorials oder so nen Kram, das hängt mir bereits zum Hals raus, würd mich echt freuen über ne ordentliche Lösung

    Danke im Vorraus...

    Mit freundlichen Grüßen,
    Christian

  • #2
    so wie ich das sehe musst du einen RIGHT JOIN nehmen.

    was hast du denn bisher gemacht?

    bitte NUR die query.
    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


    • #3
      spontan getippt, wie ich es mit vorstelle...

      Code:
      SELECT
          *
      FROM
          threads T
              RIGHT JOIN reads R USING (thread_id)
                  LEFT JOIN user U USING(user_id)
      WHERE 
          T.thread_id IS NOT NULL
      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


      • #4
        Ich habe auch mit RIGHT join schon alles ausprobiert, das war ungelogen, ich habe echt mit RIGHT alles, irgnedwo habe ich auch mal was von gelesen das man am ende mit IS NULL oder IS NOT NULL blablabla, hab echt fast alles ausprobiert.....

        Entweder ich kriege nur die alten Beiträge zurück, oder alle...

        Kannst du nicht irgendwie nen Query aufstellen??? oder sind das noch nicht genügend infos.....


        Ich bin echt verzweifelt, ich brauche dieses Forum.....undzwar mit neuen Beiträgen...

        Kommentar


        • #5
          hast du meine query nicht gesehen?
          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


          • #6
            Doch war gerade da als nur der eine Beitrag da stand....sorry

            aber es geht irgendwie nicht, hier mal die tabellen:


            Code:
            CREATE TABLE forum_threads (
              id int(11) NOT NULL auto_increment,
              board_id int(11) NOT NULL default '0',
              cat_id int(11) NOT NULL default '0',
              username varchar(40) NOT NULL default '',
              headline varchar(150) NOT NULL default '',
              icon varchar(50) NOT NULL default '',
              date varchar(25) NOT NULL default '',
              closed int(1) NOT NULL default '0',
              PRIMARY KEY  (id)
            ) TYPE=MyISAM;
            
            CREATE TABLE user_reads (
              id int(11) NOT NULL auto_increment,
              user_id int(11) NOT NULL default '0',
              thread_id int(11) NOT NULL default '0',
              PRIMARY KEY  (id)
            ) TYPE=MyISAM;
            
            
            CREATE TABLE users (
              id int(11) NOT NULL auto_increment,
              nickname varchar(30) NOT NULL default '',
              realname varchar(50) NOT NULL default '',
              gender varchar(20) NOT NULL default '',
              day char(2) NOT NULL default '0',
              month char(2) NOT NULL default '0',
              year int(4) NOT NULL default '0',
              location varchar(50) NOT NULL default '',
              country varchar(30) NOT NULL default '',
              beruf varchar(50) NOT NULL default '',
              password varchar(12) NOT NULL default '',
              rang varchar(40) NOT NULL default '',
              avatar varchar(255) NOT NULL default '',
              signatur varchar(255) NOT NULL default '',
              icq int(15) NOT NULL default '0',
              irc varchar(50) NOT NULL default '',
              email varchar(50) NOT NULL default '',
              hp varchar(200) NOT NULL default '',
              posts int(11) NOT NULL default '0',
              comments int(11) NOT NULL default '0',
              activated int(11) NOT NULL default '0',
              admin int(1) NOT NULL default '0',
              member int(1) NOT NULL default '0',
              PRIMARY KEY  (id)
            ) TYPE=MyISAM;
            Vielleicht hilft dir das weiter...

            edit: habe gerade natürlich die daten abgeändert =)


            EDIT:
            code.tags by Abraxax
            Zuletzt geändert von Abraxax; 29.09.2003, 19:32.

            Kommentar


            • #7
              1. darfst auch DU die code.tags benutzen.

              2. hättest du ja nur mal die query anpassen müssen.

              teste das mal.

              Code:
              SELECT
                  *
              FROM
                  forum_threads T
                      RIGHT JOIN user_reads R ON (R.thread_id = T.id)
                          LEFT JOIN users U ON (R.user_id = U.id)
              WHERE 
                  T.id IS NOT NULL
              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


              • #8
                Ich kriege nen Ergebnis.....das problem ist, ca 12 mal das gleiche.......und die user_id kriege ich durch nen Cookie, da ist ja aber weiter kein thema....

                mhh, das ist wirklich komisch

                edit: danke das du so schnell zeit gefunden hast

                edit2: ich kriege 3 mal 6 gleiche einträge...und das sind genau die die ich schon gelesen habe....
                Zuletzt geändert von stf]Daywalker; 29.09.2003, 19:47.

                Kommentar


                • #9
                  gib mal statt dem * die wichtigen feldnamen an.
                  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


                  • #10
                    immer noch 3 mal 6 gleiche einträge.....

                    Kommentar


                    • #11
                      Ich kriege ja immer die Einträge zurück die ich schon gelesen haben, wenn ich jetzt den WHERE teil von = auf != setze müssten doch eigentlich die sachen kommen die ich noch nicht gelesen habe....geht aber leider auch mal wieder nicht -.-

                      Kommentar


                      • #12
                        Code:
                        SELECT 
                            u.nickname, t.headline
                        FROM
                            forum_threads t
                                INNER JOIN user_reads r ON (r.thread_id = t.id)
                                    RIGHT JOIN users u ON (r.user_id = u.id)
                        WHERE 
                            r.id IS NULL
                        wie schaut's damit aus?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          PHP-Code:
                          SELECT 
                              t
                          .id
                          FROM
                              forum_threads t
                                  INNER JOIN user_reads r ON 
                          (r.thread_id t.id)
                                      
                          RIGHT JOIN users u ON (r.user_id 2)
                          WHERE 
                              r
                          .id IS NULL 


                          Das geht soweit so gut, weil ich jetzt wirklich nur die Einträge bekomme die ich nicht gelesen habe....aber leider wird alles 6 mal angezeigt....

                          also da sind 2 Threads die ich nicht gelesen habe, genau diese IDs gibt er mir auch aus, nur jeweils 6 mal, ist da ne möglichkeit das zu unterbinden???

                          Kommentar


                          • #14
                            mache noch ein GROUP BY t.id in die query
                            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


                            • #15
                              Vielen vielen Dank, es geht =)

                              Mfg, chris

                              P.S.: Wirkliches nettes Forum ;D

                              Kommentar

                              Lädt...
                              X