MySQL JOIN

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

  • MySQL JOIN

    Stammt von einem anderen Forum, doch da antwortet fast nie einer, deshalb schreib ich hier auch mal rein. Ich denke ihr seid da die besseren Cracks.

    Erstmal servus! o/

    So, ich möchte ein Miniforum erstellen, dazu will ich natürlich MySQL benutzen. Da es bei euch kein MySQL Forum gibt schreib ichs in Verbindung mit PHP hier rein.
    Bevor ich meine Frage stelle, zeig ich euch erstmal die Aufteilung des Forums (fast wie bei euch):

    viewforums.php
    +-------+------------+------------+------------+----------+
    | name | description | num_topics | num_posts | last_post |
    +-------+------------+------------+------------+----------+

    viewtopics.php
    +------+------------+--------+------+----------+
    | name | num_replies | author | views | last_post |
    +------+------------+--------+------+----------+

    viewposts.php
    +-------+---------+
    | author | message |
    +-------+---------+

    So die MySQL Tabellen sehen wie folgt aus:

    forums
    +---+------+-----------+
    | id | name | description |
    +---+------+-----------+

    topics
    +---+------+------+---------+
    | id | name | views | forum_id |
    +---+------+------+---------+

    posts
    +---+-------+---------+---------+
    | id | author | message | topic_id |
    +---+-------+---------+---------+

    So jetzt meine Frage(n):
    Die Anzeige für viewforums.php, viewtopics.php und viewposts.php sollen mit je einer Query ablaufen, d.h. ich brauche hier den JOIN Befehl.

    Beispiel:
    Anzeige von viewforums.php:
    Name und Beschreibung (description) werden aus der Tabelle `forums` ausgelesen. `num_topics` wird durch einen COUNT Befehl in der `topics` Tabelle angezeigt bzw. `num_posts` mit der Tabelle `posts`. `last_post` ist der jüngste Post aus der `posts` Tabelle.

    So wie sieht jetzt die Query für viewforums.php aus sowie für alle anderen?
    Beachte: Nochmal zum mitschreiben, jedes Script soll nur eine Query beinhalten, d.h. COUNTS usw. sollten auch in einer Query durchgeführt werden. Ich will somit viel Ausführzeit sparen.

    Danke schonmal für die produktiven Antworten!

    Btw die Spalten `forum_id` und `topic_id` dienen zur Verknüpfung der Tabellen.

    .:Pointer
    //edit: Lol, ich sehe grad, dass es sogar dazu nen angehängtes Topic gibt. Doch ich will es schnell wissen und die Queries sind wahrscheinlich ein bissl ansprungsvoller als dort beschrieben, daher brauch ich eure Hilfe.
    Zuletzt geändert von Buster; 02.04.2004, 16:27.

  • #2
    lies einfach das sticky.
    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
      Lol, so ne Antwort hab ich schon fast erwartet. -.- Les mein Edit. :ugly:

      .:Buster

      Kommentar


      • #4
        //edit: Lol, ich sehe grad, dass es sogar dazu nen angehängtes Topic gibt. Doch ich will es schnell wissen und die Queries sind wahrscheinlich ein bissl ansprungsvoller als dort beschrieben, daher brauch ich eure Hilfe.
        schnell ist nicht, bist hier nicht bei wünsch dir was.


        haste überhaupt schon ein paar abfragen?


        EDIT:
        php->quote by Abraxax
        Zuletzt geändert von Abraxax; 02.04.2004, 22:03.
        mfg
        marc75

        <Platz für anderes>

        Kommentar


        • #5
          Inwiefern meinst du "Hast du schon ein paar Abfragen"? (1)Ob ich schonmal mit MySQL gearbeitet habe oder ob (2)ich im Miniforum-Skript schon nen Query habe? 1) ja 2) nein <- erst angefangen

          Hmm, hab mir das so ungefähr vorgestellt bei viewforum.php:

          Code:
          SELECT `t1.name`, `t1.description`, 
          COUNT(`t2.id`) AS `num_topics`, COUNT(`t3.id`) AS  `num_posts` 
          FROM `forums` AS `t1`, `topics` AS `t2`, `posts` AS `t3` ...;
          Ich hab die Query mal offen gelassen (...), da ich net weiss ob sie so überhaupt funzt. Es wär einfach nur schön, wenn ihr mir alle 3 Queries schreiben könntet. Dafür wär ich euch überaus und ewig dankbar.

          schnell ist nicht, bist hier nicht bei wünsch dir was.
          Nein, so hab ich das doch nicht gemeint. -.- Ich hoffe nur, dass ihr im Stande seid es überhaupt zu lösen.

          Vielen Dank!

          //edit: Ist es eigentlich ratsam die Zeichen ` in ner Query zu benutzen? PHPMyAdmin benutzt die immer und das ist ja so die beste MySQL Software.

          .:Buster
          Zuletzt geändert von Buster; 02.04.2004, 19:24.

          Kommentar


          • #6
            als erstes wäre es mal ratsam deine query richtig zu formatieren ... heir hat keine bock auf eine quer-scroll-orgie
            Kissolino.com

            Kommentar


            • #7
              Ok, habs formatiert (s. oben). Und wann kommt endlich die Hilfe? -.- Bisher war ja von euch nichts wirklich produktives dabei. :\

              .:Buster

              Kommentar


              • #8
                Original geschrieben von Buster
                Ich hab die Query mal offen gelassen (...), da ich net weiss ob sie so
                überhaupt funzt. Es wär einfach nur schön, wenn ihr mir alle 3 Queries
                schreiben könntet. Dafür wär ich euch überaus und ewig dankbar.
                warum tutst du nicht einfach und schaust, ob das Ergebnis so ist, wie es
                sein soll. Wenn du dann Probleme hast, dann helfen wir gern. Aber
                vorgekaut wird hier nicht.

                Nein, so hab ich das doch nicht gemeint. -.- Ich hoffe nur, dass ihr im
                Stande seid es überhaupt zu lösen.
                mit solchen provokativen Sprüche erntest du NICHTS.

                Kommentar


                • #9
                  Naja, dann heissts alleine lösen. :\

                  Trotzdem danke!

                  .:Buster

                  Kommentar


                  • #10
                    Original geschrieben von Buster
                    Naja, dann heissts alleine lösen. :\

                    Trotzdem danke!

                    .:Buster
                    lösen können es sicherlich mehrere hier im board, nur warum sollte es einer wollen. Was haben wir davon, eher nix.


                    zur Formatierung:

                    PHP-Code:
                    //deine Version
                    SELECT `t1.name`, `t1.description`, 
                    COUNT(`t2.id`) AS `num_topics`, COUNT(`t3.id`) AS  `num_posts
                    FROM `forums` AS `t1`, `topics` AS `t2`, `posts` AS `t3` ...;

                    //besser lesbar:
                    SELECT 
                        
                    `t1.name`, 
                        `
                    t1.description`, 
                        
                    COUNT(`t2.id`) AS `num_topics`, 
                        
                    COUNT(`t3.id`) AS  `num_posts
                    FROM 
                        
                    `forums` AS `t1`, 
                        `
                    topics` AS `t2`, 
                        `
                    posts` AS `t3` ...; 
                    mfg
                    marc75

                    <Platz für anderes>

                    Kommentar


                    • #11
                      Es gibt gewisse Leute, die einem doch helfen und sogar sehr gerne. Vielen Dank @ Darky27, kommt nicht von eurem Board!

                      Erste SQL sieht somit wie folgt aus (viewforums.php):
                      PHP-Code:
                      SELECT 
                          t1
                      .id
                          
                      t1.name
                          
                      t1.description
                          
                      COUNT(DISTINCT t2.id) AS num_topics
                          
                      COUNT(DISTINCT t3.id) AS num_posts,
                          
                      MAX(t3.id) AS last_post
                      FROM 
                          forums 
                      AS t1
                          LEFT JOIN topics 
                      AS t2 ON t1.id t2.forum_id
                          LEFT JOIN posts 
                      AS t3 ON t2.id t3.topic_id
                      GROUP BY 
                          t1
                      .id
                      //edit:
                      Original geschrieben von marc75
                      lösen können es sicherlich mehrere hier im board, nur warum sollte es einer wollen. Was haben wir davon, eher nix.
                      Da hast du leider völlig unrecht, da gewisse Leute, die das Forum durchstöbern, dies ebenfalls gebrauchen könnten. Und helfen ist ja wohl kein Beinbruch, wir im Warcraft.de Forum zB. helfen den Leuten auch sehr gerne. Wie heisst es, man sollte sein Wissen mit anderen Leuten teilen.

                      //edit2: Btw, danke für den Formatierungstipp.

                      .:Buster
                      Zuletzt geändert von Buster; 03.04.2004, 14:18.

                      Kommentar


                      • #12
                        Original geschrieben von Buster
                        Wie heisst es, man sollte sein Wissen mit anderen Leuten teilen.
                        da ist im prinzip was wahres dran ...
                        ...Und wann kommt endlich die Hilfe? -.- Bisher war ja von euch nichts wirklich produktives dabei. :\...
                        ... ja, solchen leuten helfen wir hier immer besonders gerne.
                        Kissolino.com

                        Kommentar


                        • #13
                          Original geschrieben von Wurzel
                          da ist im prinzip was wahres dran ...
                          ... ja, solchen leuten helfen wir hier immer besonders gerne.
                          Das war nur eine kleine Kritik. Darf man das nicht von sich geben?

                          .:Buster

                          Kommentar

                          Lädt...
                          X