Problem mit JOIN

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

  • Problem mit JOIN

    Hallo,

    mein Problem ist, dass bei folgendem Code Die Ausgabe nach Datensätzen gerichtet und verdoppelt/verdreifacht/vervierfacht... wird. D.h., dass wenn ich zwei z.B. Beiträge poste, werden diese 4 mal angezeigt.

    Code:
    $result = mysql_query("SELECT T.id, T.date, T.bid, T.userid, T.catid, T.topic, T.hits, T.status, P.date, P.userid AS p_userid,
    DATE_FORMAT(T.date,'%d.%m.%Y') AS t_date, DATE_FORMAT(T.date,'%H:%i:%s') AS t_time,
    DATE_FORMAT(P.date,'%d.%m.%Y') AS p_date, DATE_FORMAT(P.date,'%H:%i:%s') AS p_time 
    FROM board_threads T INNER JOIN board_posts P USING(bid) WHERE T.bid='$id' 
    ORDER BY p_date, p_time DESC") or die (mysql_error());

  • #2
    Hört sich nach karthesischem produkt an
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      @owna6e
      und wenn du deine query mal formatiert hättest, würde ich mir die sogar ansehen.
      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
        Code:
        $result = mysql_query("
        SELECT T.id, T.date, T.bid, T.userid, T.catid, T.topic, T.hits, T.status, 
        P.date, P.userid AS p_userid,
        DATE_FORMAT(T.date,'%d.%m.%Y') AS t_date, 
        DATE_FORMAT(T.date,'%H:%i:%s') AS t_time,
        DATE_FORMAT(P.date,'%d.%m.%Y') AS p_date, 
        DATE_FORMAT(P.date,'%H:%i:%s') AS p_time
        
        FROM board_threads 
        
        T INNER JOIN board_posts P USING(bid) 
        WHERE T.bid='$id' 
        ORDER BY p_date, p_time DESC") 
        or die (mysql_error());

        Kommentar


        • #5
          naja. formatiert sieht anders aus ..... aber naja ....

          PHP-Code:
          $result mysql_query("

          SELECT

              T.id,
              T.date,
              T.bid,
              T.userid,
              T.catid,
              T.topic,
              T.hits,
              T.status, 
              DATE_FORMAT(T.date, '%d.%m.%Y') t_date, 
              DATE_FORMAT(T.date, '%H:%i:%s') t_time,

              P.date,
              P.userid,
              DATE_FORMAT(P.date, '%d.%m.%Y') p_date, 
              DATE_FORMAT(P.date, '%H:%i:%s') p_time
              
          FROM
              
              board_threads T
                  INNER JOIN board_posts P USING(bid) 

          WHERE

              T.bid = "
          .$id.

          ORDER BY
              
              p_date,
              p_time DESC

          "
          ) or die (mysql_error()); 

          wie sehen denn deine tabellen aus. einen fehler kann ich so im moment nicht sehen.
          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
            Hallo, musste mich aufgrund meiner Vergessenheit neu registrieren.

            Die Tabellen sehen folgendermaßen aus:

            Code:
            #
            # Tabellenstruktur für Tabelle `board_threads`
            #
            # Erzeugt am: 27. Dezember 2003 um 13:16
            # Aktualisiert am: 27. Dezember 2003 um 13:16
            #
            
            CREATE TABLE `board_threads` (
              `id` int(11) NOT NULL auto_increment,
              `bid` int(11) NOT NULL default '0',
              `userid` int(11) NOT NULL default '0',
              `catid` int(11) NOT NULL default '0',
              `topic` tinytext NOT NULL,
              `date` datetime NOT NULL default '0000-00-00 00:00:00',
              `hits` int(11) NOT NULL default '0',
              `status` varchar(6) NOT NULL default 'open',
              PRIMARY KEY  (`id`)
            ) TYPE=MyISAM AUTO_INCREMENT=1 ;
            
            #
            # Tabellenstruktur für Tabelle `board_posts`
            #
            # Erzeugt am: 27. Dezember 2003 um 13:16
            # Aktualisiert am: 27. Dezember 2003 um 13:16
            #
            
            CREATE TABLE `board_posts` (
              `id` int(11) NOT NULL auto_increment,
              `bid` int(11) NOT NULL default '0',
              `tid` int(11) NOT NULL default '0',
              `catid` int(11) NOT NULL default '0',
              `topic` tinytext NOT NULL,
              `userid` tinytext NOT NULL,
              `text` text NOT NULL,
              `date` datetime NOT NULL default '0000-00-00 00:00:00',
              PRIMARY KEY  (`id`)
            ) TYPE=MyISAM AUTO_INCREMENT=1 ;

            Kommentar


            • #7
              Original geschrieben von owna6e2
              Hallo, musste mich aufgrund meiner Vergessenheit neu registrieren.
              du hättest dir auch ein neues password schicken lassen. oder?


              hast du mal noch ein paar testdaten zum testen?
              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
                Äh wie jetzt Testdaten zum Testen?

                OffTopic:
                Hab' das PW für das Mailfach auch vergessen

                Kommentar


                • #9
                  Original geschrieben von owna6e2
                  Äh wie jetzt Testdaten zum Testen?
                  ja. irgendwomit muss ich ja tests machen können, um dein phänomen zu rekonstruieren ...

                  du kannst mit die daten auch via email schicken, wenn es 'geheime' daten sind.


                  OffTopic:
                  selber schuld ...
                  aber auch da muss ein forgot-pw möglich 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


                  • #10
                    Achso, klar, kann ich mal eben Daten erstellen. Falls ich es noch nicht erwähnt habe: Es geht um mein Forum, wobei Die Threads nach Datum des im Thread befindlichen neuesten Beitrag sortiert werden soll. Aber das ist denke ich klar/normal.

                    Code:
                    #
                    # Daten für Tabelle `board_threads`
                    #
                    
                    INSERT INTO `board_threads` VALUES (1, 11, 1, 4, 'Teleshizzle', '2004-01-27 16:39:58', 0, 'open');
                    INSERT INTO `board_threads` VALUES (2, 11, 1, 4, 'Testeintrag No. 2', '2004-01-27 16:41:37', 0, 'open');
                    
                    #
                    # Daten für Tabelle `board_posts`
                    #
                    
                    INSERT INTO `board_posts` VALUES (1, 11, 1, 4, 'Teleshizzle', '1', 'Televizzle is sometimes very shizzle. Do you understandizzle thizzle? :ugly:', '2004-01-27 16:39:58');
                    INSERT INTO `board_posts` VALUES (2, 11, 2, 4, 'Testeintrag No. 2', '1', 'Alle heißen Hans, außer Dieter, der heisst Klaus.', '2004-01-27 16:41:37');
                    Vom Inhalt her vielleicht nivaeulos, aber gebräuchlich denke ich.

                    Das Problem hab' ich mal als Bilddatei mal angehängt.

                    OffTopic:
                    Gibt's leider nicht und ist eigentlich egal, hauptsache mein Problem wird weiterhin behandelt
                    Angehängte Dateien

                    Kommentar


                    • #11
                      mhm. ich hab mal ein GROUP BY eingefügt.

                      damit sollte es nun passen..

                      Code:
                      SELECT
                      
                          T.id,
                          T.date,
                          T.bid,
                          T.userid,
                          T.catid,
                          T.topic,
                          T.hits,
                          T.status, 
                          DATE_FORMAT(T.date, '%d.%m.%Y') t_date, 
                          DATE_FORMAT(T.date, '%H:%i:%s') t_time,
                      
                          P.date,
                          P.userid,
                          DATE_FORMAT(P.date, '%d.%m.%Y') p_date, 
                          DATE_FORMAT(P.date, '%H:%i:%s') p_time
                          
                      FROM
                          
                          board_threads T
                              LEFT JOIN board_posts P USING(bid) 
                      
                      WHERE
                      
                          T.bid = 11
                      
                      GROUP BY
                          T.id
                      
                      ORDER BY
                          
                          p_date,
                          p_time DESC
                      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


                      • #12
                        Äh, es geht teilweise. Also Threads werden nicht mehr verdoppelt ausgegeben/angezeigt, doch wird das Postdatum (P) doppelt angezeigt und nicht dem Thread zugeordnet, sodass auch nicht richtig sortiert wird.

                        Kommentar


                        • #13
                          mach mal aus
                          Code:
                          GROUP BY
                              T.id
                          ein
                          Code:
                          GROUP BY
                              T.[b]b[/b]id
                          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


                          • #14
                            Jetzt wird leider nur ein Thread angezeigt, undzwar der Ersterstellte.
                            Zuletzt geändert von owna6e2; 27.01.2004, 18:07.

                            Kommentar


                            • #15
                              is ja auch klar
                              where t.bid=11 group by t.bid
                              gruppiere wenn dann nach allen single cols.
                              oder select DISTINCT hilft manchmal auch
                              Beantworte nie Threads mit mehr als 15 followups...
                              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                              Kommentar

                              Lädt...
                              X