Join

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

  • Join

    Hallo,

    ich habe da ein Problem mit dem JOIN-Syntax. Ich habe mir schon den Thread von mrhappiness und in der manual nachgelesen wie das funktioniert, trotzdem immernoch nicht den Sinn kapiert, wann man right join, left join, inner join, etc. benutzen soll.

    In meinem Fall möchte ich für mein Board alle Threads selecten und das alles nach deren Einträge sortieren, also von einer anderen Tabelle.

    PHP-Code:
    $result  mysql_query("SELECT *,
    DATE_FORMAT(date,'%d.%m.%Y') AS newdate,
    DATE_FORMAT(date,'%H:%i:%s') AS newtime
    FROM board_threads WHERE bid='
    $id'
    ORDER BY newdate, newtime DESC"
    ); 
    So sieht zz mein Code aus. Jetzt weiss ich nicht wie ich das anstelle bzw. was für ein JOIN ich benutzen muss. Wäre nett, wenn jemand das kurz erläutern könnte.

  • #2
    Re: Join

    Original geschrieben von owna6e
    [...] bzw. was für ein JOIN ich benutzen muss. [...]
    und wir sollen jetzt raten wie die tabellen aussehen, bzw, wie die 2. tab aussieht?

    auch wissen wir nicht, wie der tabs verbunden sind.

    du solltest also mal mehr infos posten.

    im zweifel solltest du aber mal INNER JOIN probieren.
    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
      Sag mir bitte was für Infos notwendig sind und ich poste sie.

      Kommentar


      • #4
        tabellenstruktur beider tabellen.

        die felder, wo die tabellen verbunden werden sollen.

        die felder, die du aus den beiden tabellen benötigst. alle felder (*) ist nicht gut.
        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


        • #5
          Code:
          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`)
          );
          
          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`)
          );
          Ich möchte von "board_threads" selektieren und nach "board_posts" sortieren.

          Kommentar


          • #6
            Original geschrieben von owna6e
            Ich möchte von "board_threads" selektieren und nach "board_posts" sortieren.
            das verstehe ich nicht so ganz.

            willst du alles thread mit allen dazugehörigen posts haben?

            willst du nur die z.b. letzten 10 posts haben, egal welcher thread?

            was hat die sortierung der threads nach posts auf sich, wenn du die posts nicht brauchst.

            kannst du mir da mal bitte einen kleinen hintergrund geben?
            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


            • #7
              Also ich spreche von diesem Bereich, genau wie hier z.B.:

              http://www.php-resource.de/forum/for...p?s=&forumid=5

              Und ich möchte logischer Weise nach den Post Zeit sortieren, da neue Posts ja immer ganz oben angezeigt werden sollen.

              Kommentar


              • #8
                damit solltest du jetzt weiterkommen..


                Code:
                SELECT
                    T.bid
                    T.topic,
                    T.date,
                    P.id,
                    P.date,
                    P.topic    
                
                FROM
                    board_threads T
                        INNER JOIN board_posts P USING(bid)
                        
                WHERE
                    bid = 5
                    
                ORDER BY
                    T.topic ASC,
                    P.date DESC

                den WHERE-teil kannst du auch weglassen. aber bekommst du dann eben alle boards gezeigt.

                ich würde es schon einschränken. das ist besser.
                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


                • #9
                  Ich krieg da leider immer ein mysql_fetch_array error. Ich habe den Code meinen Wünschen etwas angepasst, also mit DATE_FORMAT.

                  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,
                  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 bid='$id' 
                  ORDER BY T.topic ASC, p_date, p_time DESC");

                  Kommentar


                  • #10
                    ein mysql_error() könnte helfen.

                    aber wenn man das nciht macht....


                    ps. ich sehe schon, woran es liegt...
                    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


                    • #11
                      Hi!

                      Ändere doch mal Deine WHERE-Klausel in:
                      WHERE T.bid='".$id."'
                      Und lass Dir das Ergebnis erstmal mit phpMyAdmin oder direkt über MySQL ausgeben.....

                      Gruß,
                      Lugi.

                      Kommentar


                      • #12
                        Achso, die Where Klausel war zweideutig. Naja, nun scheints zu gehen, doch plötzlich werden meine Datensätze doppelt ausgegeben

                        EDIT:
                        Danke lugi, habe es bereits rausgefunden

                        PS: Die DS werden irgendwie von Anzahl der Beiträge bestimmt. Ich habe jetzt z.B. 3 Postings und 3 mal wird jeder einzelne Thread ausgegeben.

                        Zuletzt geändert von owna6e; 22.12.2003, 15:57.

                        Kommentar


                        • #13
                          zu deinem edit.

                          deswegen sollst du ja eben das WHERE auf das board einschränken.

                          dann ist es wohl auch sinnvoll, wenn du nur post-felder anzeigst. die board.felder kannst du dann auch der query entfernen.
                          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
                            Original geschrieben von Abraxax
                            deswegen sollst du ja eben das WHERE auf das board einschränken.
                            Das tue ich ja mit der Where-Klausel:

                            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


                            • #15
                              wie lugi schon sagte!

                              PHP-Code:
                              $result mysql_query("SELECT 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()); 
                              Offe
                              Zuletzt geändert von Offe1; 22.12.2003, 21:13.

                              Kommentar

                              Lädt...
                              X