Join Problem

  • Ich denke ich habe ein ganz simpel zu lösendes Problem aber kriege es trotzdem nicht hin^^

    Also es sind 2 Tabellen gegen, eine heißt Foren und die andere Themen, wobei der Inhalt von Themen jeweils eine FID enthält womit man sie dem Forum zu ordnen kann.

    Nun möchte ich das zu jedem Forum sagen wir mal es sind 3 jeweils EIN Beitrag aus Themen hinzugefügt wird. (natürlich nur der Beitrag mit der jeweiligen FID)
    Dabei sollte aber nur der Beitrag mit der höchsten ID hinzugefügt werden.

    Hier mal meine bisherigen Tests:


    So werden zwar die Themen richtig zu den Beiträgen geordnet aber wenn es zB 3 Foren und 6 Beiträge gibt werden auch 6 Beiträge ausgegeben obwohl nur 3 ausgegeben werden sollen.

    Ich hoffe schonmal das ihr mir helfen könnt.

  • Hm, ich werde jetzt für nichts garantieren, aber dennoch versuch ichs mal. Eventuell gibt dir ja mein Ansatz Aufschluss über die Lösung

    Vielleicht klappt das sogar :P

  • Ja so klappt es da ich es auch schon so hatte^^ nur dan wird aber immer nur 1 Forum angezeigt nämlich das des Threads mit der Höchsten ID

  • Mh kannst du mir das mit dem group by mal erklären? Ich werde mich auch mal mit google schlau machen

  • Ich habs nun so gemacht.


    SELECT forum.id as id,
    forum.name as name, forum.details as details,
    forum.topics as topics,
    forum.posts as posts,
    threads.id as threadsid,
    threads.fid as threadsfid,
    threads.topic as threadstopic,
    threads.date as threadsdate,
    threads.time as threadstime
    FROM forum
    LEFT JOIN threads ON (threads.fid = forum.id)
    group by threads.fid

  • SELECT forum.id as id,
    forum.name as name, forum.details as details,
    forum.topics as topics,
    forum.posts as posts,
    threads.id as threadsid,
    threads.fid as threadsfid,
    threads.topic as threadstopic,
    threads.date as threadsdate,
    threads.time as threadstime
    FROM forum
    LEFT JOIN threads ON (threads.fid = forum.id)
    order by threads.id DESC
    group by forum.id


    probiers mal so.. kA obs funkt.

  • Ne so gehts nit kommtn Fehler:

  • Code
    Zeige Datensätze 0 - 6 (7 insgesamt, die Abfrage dauerte 0.0004 sek)
    SQL-Befehl: 
    SELECT forum.id AS id, forum.name AS name, forum.details AS details, forum.topics AS topics, forum.posts AS posts, threads.id AS threadsid, threads.fid AS threadsfid, threads.topic AS threadstopic, threads.date AS threadsdate, threads.time AS threadstime
    FROM forum
    LEFT JOIN threads ON ( threads.fid = forum.id )
    ORDER BY threads.id DESC

    Mit diesem Code kommt folgende ausgabe.
    Aber ich möchte nicht das alle 7 Ausgegeben werden sondern nur 2.
    Nämlich

    Code
    1    News    News    5    4    9    1    Lol    20. Jul 2007    00:48


    und

    Code
    2    Feedback    Hier kann Feedback hin^^    2    1    7    2    Gh    20. Jul 2007    00:30
    Code
    anstatt
    id 	name 	details 	topics 	posts 	threadsid 	threadsfid 	threadstopic 	threadsdate 	threadstime
    1 	News 	News 	5 	4 	9 	1 	Lol 	20. Jul 2007 	00:48
    1 	News 	News 	5 	4 	8 	1 	Lol 	20. Jul 2007 	00:45
    2 	Feedback 	Hier kann Feedback hin^^ 	2 	1 	7 	2 	Gh 	20. Jul 2007 	00:30
    1 	News 	News 	5 	4 	6 	1 	Lol 	20. Jul 2007 	1184883995
    1 	News 	News 	5 	4 	5 	1 	Test 	20. Jul 2007 	1184883961
    2 	Feedback 	Hier kann Feedback hin^^ 	2 	1 	4 	2 	FID2 	FID2 	FID2
    1 	News 	News 	5 	4 	2 	1 	FID1 	FID1 	FID1

    [/code]

  • Geht nict. Habe ich aber auch schon vorher getestet^^ Dann werden zwar die neusten 2 Themen angezeigt (nach ID natürlich) aber bei dem Beispiel zB sind die neusten 2 Beiträge aus dem Forum "News" es soll aber nur einer ausgewählt werden und dan noch einer aus Feedback

  • Langsam scheitere ich an diesem Problem. Ich werde mir die Tage mal angucken wie fertige Foren das geregelt haben wie das Woltlabb oder phpbb oder wie die alle heißen.
    Vielleicht schafft es ja hier noch einer^^
    Danke schonmal

  • Also, ich bin sicher, dass es möglich ist.
    Ich versteh glaub ich auch nicht so ganz dein Problem.
    Eventuell erläuterst du es noch mal im Detail?

  • Ok noob ich werde es Versuchen.
    Und danke das du dir soviel Zeit für mich nimmst.

    Also jedes Forum ist eigentlich recht simpel aufgebaut.

    Es gibt 3 Hauptbereiche

    Foren (dort sind die Foren aufgelistet) ---> Threads (hier sind die Threads des jeweiligen Forums aufgelistet. Identifiziert werden alle Threads mit einer FID, sodass nur die Threads angezeigt werden die auch in dem jeweiligen Forum geschrieben wurden) ----> Beiträge (hier wieder das selbe wie bei den Threads nur das sie nun durch die FID und TID identifiziert werden, sodass die Beiträge im richtigen Forum und zum richtigen Thema angezeigt werden)

    Alles recht simpel und logisch.

    Nun gibt es ja

    bei vielen Foren (eigentlich alle^^) noch das extra "Letzter Beitrag" wo zB der Name des letzten Posters oder sowas angezeigt wird.
    Sowass kann man natürlich so machen das in der Tabelle "Foren" einfach noch mehrer Spalten ergänzt werden wodurch diese einfach immer aktualisiert werden.
    Ich finde sowas recht "schlecht" und kompliziert.
    Also möchte ich diese Spalten sozusagen aus der Tabelle "Themen" nehmen.
    Und nach meinen Kenntnissen löst man sowas mit einem Join.

    Nur leider muss man es so machen das zu jedem Forum immer nur ein Thema genommen wird und nicht wie ich es mit folgendem Code mache das alle Themen genommen werden:

    Die ausgabe sieht so aus: (Es werden 3 Zeilen angezeigt obwohl es nur 2 sein sollen)

    Code
    id name        details        topics posts threadsid threadsfid threadstopic
    1 News         News          5        5      8            1              Erster Post in News  
    2 Feedback   Feedback    5        5      9            2              Erster Post in Feedback
    2 Feedback   Feedback    5        5      10           2             Zweiter Post in Feedback

    Die zweite Zeile soll natürlich nicht ausgegeben werden da ihr Thema älter ist als die aus der letzten Zeile. Dies erkennt man zB an der Threadsid.

    Ich hoffe das reicht an erklärung und ihr könnt mir helfen.

  • Also, ich würde sowas wie "Letzter Beitrag" mit Hilfe der posts Tabelle generieren, ich hoffe mal, dass du so eine hast. In dieser posts Tabelle sollte auch ein Fremdschlüssel stecken, nämlich der, zu welcher Topic dieser Post gehört, denn es kann ja keinen Post ohne Topic geben.
    Mit einem Join kannst du dann dort den jüngsten Beitrag auswählen.

  • Also das verstehe ich nit so ganz erkläre das mal mit der posts table.
    Ich habe 3 Tabellen in jeder stehen jeweils die Foren, Themen und Beiträge mit eindeutigen identifizierungen durch die FID bei den Themen und die FID und die TID bei den Beiträgen.

  • Ich bin ja soo blöde^^ Also wenn ihr es wissen wollt jetzt FUnktioniert es. Leider war ich immer zu faul eure Tipps direkt richtig zu Testen. Ich habe die SQL Codes immer nur mit phpmyamdin getestet wodurch es nicht geklappt hatt aber jetzt auf dem Webspace funktioniert es.
    Guckt einfach mal selber.
    http://543218231.54.funpic.de/myown/forum/index.php

    Danke nochmal an alle und vorallem NoOob^^