JOINS und LIMIT?

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

  • JOINS und LIMIT?

    Danke für die Beispiele. Eine Frage habe ich aber noch. Was macht man, wenn man in mehrfach verschachtelten JOINS von den inneren Tabellen nur eine bestimmte Anzahl Zeilen möchte?
    Ich habe z.B. eine Abfrage wie die folgende:
    Code:
    "SELECT * FROM boards LEFT JOIN threads ON boards.board_id = threads.board_id LEFT JOIN posts ON threads.thread_id = posts.thread_id"
    Nun möchte ich, dass es nur einen einzigen der threads nimmt, nicht alle. Ich habe versucht, vor dem letzten LEFT JOIN ein LIMIT 1 einzubauen, aber das gibt nen Fehler...

  • #2
    z.b. mit WHERE threads.thread_id = 12 ?
    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
      Nein, das geht nicht, es ist nich ein bestimmter, sondern nur der erste...hmmm, wobei, vielleicht würde es mit MIN gehen...

      Kommentar


      • #4
        Nein, geht auch nicht. Ok, mal zum weiteren Verständnis:
        Ich habe ein Forum, in welchem auch die News-Beiträge als Threads gespeichert werden. Deren erster Post ist jeweils der Newsbeitrag, während alle weiteren Kommentare dazu sind. Nun möchte ich auf der Hauptseite die News ohne die Kommentare anzeigen. Bisher habe ich die News mit oben geposteter Abfrage eingelesen, aber da kommen dummerweise alle Kommentare auch mit. Irgendwie müsste man bestimmen können, dass er den LEFT JOIN nur mit dem ersten Post macht...

        Kommentar


        • #5
          was is denn der unterschied zwischen den tabellen threads und posts?

          gibt's ne posts.post_id, die du verwenden könntest?

          oder du machst im ersten beitrag (dem newseintrag selbst) irgendein eindeutiges merkmal rein
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Code:
            TABLE threads
               board_id   INT+
               thread_id   INT+ AUTO_INC PRIMARY
               weitere Felder...
            
            TABLE posts
               thread_id   INT+
               post_id   INT+ AUTO_INC PRIMARY
               weitere Felder...
            Die werden dann mit nem LEFT JOIN verknüpft (keine Ahnung was ich tue, aber es hat bisher funktioniert). Ich möchte nun, dass nur jeweils der erste post per thread ausgelesen wird (oben habe ich es falsch angegeben, ich Nulpe). Das wäre eigentlich derjenige mit der kleinsten post_id. Darum hab ich es mal mit einem MIN() versucht, aber hat nicht funktioniert...

            Kommentar


            • #7
              hat nicht funktioniert heißt?

              fehlermeldung?
              mysql_error()
              abfrage in phpmyadmin probiert?


              zur not machst du beim jeweils ersten eintrag in der zusätzlich spalte start_entry ne 1 und liest dann nur die aus
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Hab versucht nach der ersten WHERE Klausel ein AND posts.post_id = MIN(posts.post_id) einzubauen, aber dies scheint eine unzulässige Anwendung von MIN zu sein. Ich bin mir fast sicher, dass man das ganze mit irgendwelchen anderen JOINS lösen könnte, aber ich seh einfach nicht wie. Oder gibt es mittlerweile Subqueries in mySQL?

                Kommentar


                • #9
                  Ok, ich habe das ganze nun auf zwei SELECTs aufgeteilt. Ist zwar weniger effizient, aber es funktioniert. Wenn doch noch jemand weiss, wie man es in einem SELECT machen könnte, dann würde ich das trotzdem gerne wissen. Danke.

                  Kommentar


                  • #10
                    Ich habe es nun herausgefunden. Man gruppiert einfach nach threads.id und ordnet nach posts.id. Also "SELECT * FROM boards LEFT JOIN threads ON boards.board_id = threads.board_id LEFT JOIN posts ON threads.thread_id = posts.thread_id GROUP BY threads.id ORDER BY posts.id DESC".
                    Dies liefert erstaunlicherweise nur die ersten Posts von jedem Thread und ordnet sie so an, dass der neueste zuoberst ist. Also genau das, was ich für die Anzeige der News benötige.

                    Kommentar

                    Lädt...
                    X