SQL-Abfrage für Forenticker

Zack

cookies vader
Guten Morgen,
ich möchte für einen Forenticker aus meiner Datenbank mit folgender Strucktur alle letzten 5 Threads selektieren wobei kein Thread doppelt angezeigt werden soll, nur der Timestamp des Letzten Posters. Das ganze soll nach der Uhrzeit des letzten Posters sortiert werden.

Also quasi sollten mehrere Leute hinternander in einen Thread posten dann wird lediglich das Datum aktualisiert. Kann ich dies mit einer SQL-Abfrag realisieren?

Code:
--
-- Tabellenstruktur für Tabelle `bb1_posts`
--

CREATE TABLE IF NOT EXISTS `bb1_posts` (
  `postid` int(11) unsigned NOT NULL auto_increment,
  `parentpostid` int(11) unsigned NOT NULL default '0',
  `threadid` int(11) unsigned NOT NULL default '0',
  `userid` int(11) unsigned NOT NULL default '0',
  `username` varchar(50) NOT NULL default '0',
  `iconid` int(11) unsigned NOT NULL default '0',
  `posttopic` varchar(100) NOT NULL default '',
  `posttime` int(11) unsigned NOT NULL default '0',
  `message` mediumtext NOT NULL,
  `attachments` int(11) unsigned NOT NULL default '0',
  `edittime` int(11) unsigned NOT NULL default '0',
  `editorid` int(11) unsigned NOT NULL default '0',
  `editor` varchar(50) NOT NULL default '',
  `editcount` mediumint(7) unsigned NOT NULL default '0',
  `allowsmilies` tinyint(1) NOT NULL default '1',
  `allowhtml` tinyint(1) NOT NULL default '0',
  `allowbbcode` tinyint(1) NOT NULL default '1',
  `allowimages` tinyint(1) NOT NULL default '1',
  `showsignature` tinyint(1) NOT NULL default '0',
  `ipaddress` varchar(15) NOT NULL default '',
  `visible` tinyint(1) NOT NULL default '0',
  `reindex` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`postid`),
  KEY `iconid` (`iconid`),
  KEY `userid` (`userid`,`visible`),
  KEY `attachments` (`attachments`),
  KEY `threadid` (`threadid`,`visible`),
  KEY `threadid_2` (`threadid`,`userid`),
  KEY `parentpostid` (`parentpostid`),
  KEY `visible` (`visible`,`posttime`),
  KEY `reindex` (`reindex`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10724 ;

Danke im Vorraus Ra7or
 
Moin,

wenn du als Kriterium DISTINCT(threadid) nimmst, und dir dann nach posttime absteigend sortiert 5 Einträge liefern lässt, sollte das gehen.
 
Geht bestimmt auch einfacher aber funktionieren sollte:


SELECT MAX(posttime) AS mtime, threadid FROM bb1_post GROUP BY threadid ORDER BY mtime DESC LIMIT 0,5


Dann hast du die letzten 5 aktiven Threads. In Threadid steht die id des Threads in mtime die letzte Aktivität.
 
gut damit bekomm ich die letzten threads.

Aber nicht die Threads in dennen zuletzt gepostet wurde
 
Dazu kenne ich die Bedeutung der Spalten zu wenig. Aber ich habe mal angenommen das bb1_posts alle Beiträge des Forums beinhaltet. Die threadid den Thread beschreibt und posttime das Datum+Uhrzeit des jeweiligen Beitrags enthält.

Die Posts werden nach threadid gruppiert und in jeder Gruppe die späteste posttime hinzugefügt anschließend wird die resultierende Menge absteigend nach dem max posttime sortiert und die ersten 5 Elemente zurückgeliefert.
 
Du hast es genau erfasst.

ich bekomm durch die Abfrage die du mir geschrieben hast nur die letzten Threads. Aber nicht die Uhrzeit und das Datum wann der letze Post war.

ich habs gelöst: ich hab in der der schleife einfach noch eine sql abfrage gemacht.
 
Zuletzt bearbeitet:
Zurück