bisselbock
Fußballtrainer
- 4 Mai 2006
- 90
- 5
Hallo! Ich brauche eine recht komplexe SQL-Abfrage. Folgende Ausgangssituation:
Dem geschulten Auge wird schnell klar, dass es sich dabei um die DB-Struktur eines einfachen Forums (ohne Kategorien) handelt. Nun möchte ich auf der ersten Seite eine Übersichtsseite mit folgenden Informationen darstellen:
- ein Bildchen (aus forum_emoteicons)
- den Threadnamen (aus forum_threads)
- den Threadstarter (ebenfalls in forum_threads als ID festgehalten und per Join auf forum_users)
- und (jetzt wird es schwieriger) das Datum des letzten Posts sowie den Namen des Users, der diesen Beitrag verfasst hat.
Mit der folgenden Abfrage bekomme ich wirklich schon fast alle Informationen, die ich haben will, nur eben nicht den Usernamen des letzten Posters. Komme ich da mit einer Abfrage ran? Wird schwierig, oder?
Es soll nachher quasi möglich sein, dass ResultSet so zu verwenden, dass ich wie in diesem Forum ausgeben kann "Letzter Beitrag am 13.09.2006
von bisselbock".
Danke für eure Hilfe...
Code:
--
-- Tabellenstruktur für Tabelle 'forum_emoteicons'
--
CREATE TABLE forum_emoteicons (
IconID int(3) unsigned NOT NULL auto_increment,
Dateiname varchar(100) collate latin1_general_ci NOT NULL,
IconText varchar(100) collate latin1_general_ci NOT NULL,
PRIMARY KEY (IconID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'forum_posts'
--
CREATE TABLE forum_posts (
PostID int(7) unsigned NOT NULL auto_increment,
ThreadID int(6) NOT NULL,
`Text` text collate latin1_general_ci NOT NULL,
UserID int(5) NOT NULL,
Erstellt datetime NOT NULL,
IP varchar(15) collate latin1_general_ci NOT NULL,
Provider varchar(70) collate latin1_general_ci NOT NULL,
PRIMARY KEY (PostID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'forum_threads'
--
CREATE TABLE forum_threads (
ThreadID int(6) unsigned NOT NULL auto_increment,
Titel varchar(100) collate latin1_general_ci NOT NULL,
EmoteIcon int(3) NOT NULL,
Starter int(5) NOT NULL,
Klicks int(6) NOT NULL,
Antwortzahl int(5) NOT NULL,
Erstellt datetime NOT NULL,
lastPosterID int(5) unsigned NOT NULL,
lastPosterTime datetime NOT NULL,
PRIMARY KEY (ThreadID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle 'forum_users'
--
CREATE TABLE forum_users (
UserID int(5) unsigned NOT NULL auto_increment,
Nickname varchar(20) collate latin1_general_ci NOT NULL,
Vorname varchar(40) collate latin1_general_ci NOT NULL,
Nachname varchar(50) collate latin1_general_ci NOT NULL,
Email varchar(60) collate latin1_general_ci NOT NULL,
ICQ varchar(20) collate latin1_general_ci NOT NULL,
Passwort varchar(32) collate latin1_general_ci NOT NULL,
Homepage varchar(200) collate latin1_general_ci NOT NULL,
Wohnort varchar(50) collate latin1_general_ci NOT NULL,
Beitragszahl int(5) NOT NULL,
Erstellt datetime NOT NULL,
Gesperrt tinyint(1) NOT NULL default '1',
PRIMARY KEY (UserID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
- ein Bildchen (aus forum_emoteicons)
- den Threadnamen (aus forum_threads)
- den Threadstarter (ebenfalls in forum_threads als ID festgehalten und per Join auf forum_users)
- und (jetzt wird es schwieriger) das Datum des letzten Posts sowie den Namen des Users, der diesen Beitrag verfasst hat.
Mit der folgenden Abfrage bekomme ich wirklich schon fast alle Informationen, die ich haben will, nur eben nicht den Usernamen des letzten Posters. Komme ich da mit einer Abfrage ran? Wird schwierig, oder?
Code:
SELECT t.ThreadID, t.Titel, t.Starter, DATE_FORMAT(t.Erstellt,"%d.%m.%y %H:%i") as kurzDatum, t.Antwortzahl,
u.Nickname, DATE_FORMAT(MAX(p.Erstellt),"%d.%m.%y %H:%i") AS maxdat, e.Dateiname, e.IconText
FROM forum_threads t, forum_users u, forum_posts p, forum_emoteicons e
WHERE u.UserID = t.Starter AND t.ThreadID = p.ThreadID AND t.EmoteIcon = e.IconID GROUP BY t.ThreadID, t.Titel
ORDER BY t.Erstellt
DESC LIMIT 0,10
von bisselbock".
Danke für eure Hilfe...
.