Sortieren Forum Threads mit neuesten Forum Posts

bomberpilotmp3

Erfahrenes Mitglied
Guten abend,

ich bin am Verzweifeln. Ich habe ein Forum geschrieben, was soweit gut funktioniert. Nun habe ich das problem, mit der Sortierung.

Hier meine Tabellen:

Code:
CREATE TABLE `FORUM_POST` (
  `POST_ID` int(11) NOT NULL auto_increment,
  `THREAD_ID` int(11) NOT NULL,
  `TOPIC_ID` int(11) NOT NULL,
  `POST_BBCODE` int(1) NOT NULL,
  `POST_SMILIE` int(1) NOT NULL,
  `POST_CHANGE` int(11) NOT NULL,
  `POST_CHANGEBY` varchar(15) NOT NULL,
  `POST_AUTOR` varchar(15) NOT NULL,
  `POST_DATE` int(11) NOT NULL,
  `POST_DNS` varchar(15) NOT NULL,
  `POST_TEXT` mediumtext NOT NULL,
  PRIMARY KEY  (`POST_ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1077 ;


CREATE TABLE `FORUM_THREAD` (
  `THREAD_ID` int(11) NOT NULL auto_increment,
  `TOPIC_ID` int(11) NOT NULL,
  `THREAD_ICON` int(11) NOT NULL,
  `THREAD_HITS` int(11) NOT NULL,
  `THREAD_CLOSE` int(1) NOT NULL,
  `THREAD_IMPORTANT` int(1) NOT NULL,
  `THREAD_BBCODE` int(1) NOT NULL,
  `THREAD_SMILIE` int(1) NOT NULL,
  `THREAD_CHANGE` int(11) NOT NULL,
  `THREAD_CHANGEBY` varchar(15) NOT NULL,
  `THREAD_AUTOR` varchar(15) NOT NULL,
  `THREAD_DATE` int(11) NOT NULL,
  `THREAD_DNS` varchar(15) NOT NULL,
  `THREAD_HEADTITLE` varchar(500) NOT NULL,
  `THREAD_TEXT` mediumtext NOT NULL,
  PRIMARY KEY  (`THREAD_ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=141 ;



Zum Auslesen der Forum Themen und der Letzten Einträge nutze ich das:

PHP:
$select_thread = mysql_query('SELECT * FROM `FORUM_THREAD` LEFT JOIN `FORUM_POST` ON FORUM_THREAD.TOPIC_ID = FORUM_POST.TOPIC_ID WHERE
                                      FORUM_THREAD.TOPIC_ID = "'.$db->sql_res($_GET['category']).'" ORDER BY FORUM_POST.POST_DATE DESC LIMIT '.$FT_CALCULATE.', '.$FT_LIMIT) or die(mysql_error());

Ich möchte nun die Themen nach letzten Post sortieren. Das bebdeutet, das Thema soll ganz nach oben hin, sobald ein neuer Eintrag im Thema vorhanden ist. Wenn ein User in einem Alten Thema das sich auf Seite 2 befindet einen Beitrag schreibt, soll es auf der 1. Seite nach ganz oben verschoben werden.

Ich bedanke mich für jede Hilfe!
 
Hiho,

SQL:
select
	*
From
	`forum_thread`
Order By (
	Select
		Max(`forum_post`.`post_id`)
	From
		`forum_post`
	Where
		`forum_post`.`thread_id` = `forum_thread`.`thread_id`
	Limit
		1
)
Desc
Limit
	$ft_calculate,
	$ft_limit
;

Und das ganz ohne Joins ;)

Lg
 
Hi, danke für deinen Beitrag. Also es funktioniert inzwischen so, wie ich mir es vorstelle. Nur wenn ich ein Neues Thema aufmache, das frisch ist und noch keinen Beirtrag beinhaltet, wird dieses Thema ganz zum schluss verschoben, also auf die Letzte Seite.

Hier mal mein Code:
PHP:
mysql_query('SELECT * FROM `FORUM_THREAD` WHERE `TOPIC_ID` = "'.$db->sql_res($_GET['category']).'" 
                            ORDER BY (SELECT MAX(`FORUM_POST`.`POST_ID`) FROM `FORUM_POST`
                                      WHERE `FORUM_POST`.`THREAD_ID` = `FORUM_THREAD`.`THREAD_ID` LIMIT 1) DESC LIMIT '.$FT_CALCULATE.', '.$FT_LIMIT);
 
Zuletzt bearbeitet:
Du hast das LIMIT vergessen ;)

SQL:
SELECT
    *
FROM
    `forum_thread`
ORDER BY (
    SELECT
        Max(`forum_post`.`post_id`)
    FROM
        `forum_post`
    WHERE
        `forum_post`.`thread_id` = `forum_thread`.`thread_id`
    LIMIT
        1
)
DESC
LIMIT # das hier ist für die Anzahl pro Seite zuständig
    $ft_calculate,
    $ft_limit
;

PHP:
$select_thread = mysql_query('SELECT * FROM `FORUM_THREAD` ORDER BY (SELECT Max(`FORUM_POST`.`POST_ID`) FROM `FORUM_POST` 
        WHERE `FORUM_POST`.`THREAD_ID` = `FORUM_THREAD`.`THREAD_ID` AND `TOPIC_ID` = "'.$db->sql_res($_GET['category']).'" LIMIT 1) 
        DESC LIMIT '.$ft_calculate.', '.$ft_limit) or die(mysql_error());

Dann werden $ft_limit Threads von $ft_calculate an angezeigt, sortiert nach dem letzten Post (mit dem neusten Beitrag nach oben), das ist es doch was du erreichen wolltest oder? :)

Lg
 
Zuletzt bearbeitet von einem Moderator:
Ups,
PHP:
$select_thread = mysql_query('SELECT * FROM `FORUM_THREAD` WHERE `FORUM_THREAD`.`TOPIC_ID` = "'.$db->sql_res($_GET['category']).'"  ORDER BY (SELECT Max(`FORUM_POST`.`POST_ID`) FROM `FORUM_POST`  
        WHERE `FORUM_POST`.`THREAD_ID` = `FORUM_THREAD`.`THREAD_ID` LIMIT 1)  
        DESC LIMIT '.$ft_calculate.', '.$ft_limit) or die(mysql_error());

"WHERE `FORUM_THREAD`.`TOPIC_ID` = "'.$db->sql_res($_GET['category']).'"" waren an der falschen Stelle ;)
Lg
 
Hallo,

leider funktioniert es immer noch nicht. Ich habe nun ein wenig hin- und herprobiert, leider ohne Erfolg. Wie gesagt, ich möchte eigendlich nur, das die neusten Themen ganz oben hinkommen (auch wenn nur das Thema ohne Beitrag existiert) und wenn in ein älteres Thema geschrieben wird, das das ganz nach oben kommt. Desweiteren sollte das Thema nach Wichtigkeit sortiert werden. (THREAD_IMPORTANT, siehe Sql Code) Wenn ein Thema als Wichtig markiert wurde, hat das höhste Priorität, also sprich es soll ganz nach oben.

Leider habe ich viel gegeoogelt und nichts gefunden. BItte um einen Lösungsvorschlag.
 
Hi,

also bei mir funktioniert der Code problemlos :confused:

SQL:
SELECT
    *
FROM
    `forum_thread`
ORDER BY (
    SELECT
        Max(`forum_post`.`post_id`)
    FROM
        `forum_post`
    WHERE
        `forum_post`.`thread_id` = `forum_thread`.`thread_id`
    LIMIT
        1
)
DESC
LIMIT
    $ft_calculate,
    $ft_limit
;

Lg
 
Zuletzt bearbeitet von einem Moderator:
Eine Alternative die du machen könntest wäre, wenn ein neuer Beitrag geschrieben wird, der Thread-Eintrag mit nem Timestamp geupdatet wird, nach dem du dann einfach sortieren könntest.

Lg
 
Zurück