Et kompliceret query
Jeg er igang med at bygge mig et forum. Jeg har to tabeller. Et til forumindlæg (forum_main) og et til brugere (users):CREATE TABLE forum_main (
id int(10) unsigned NOT NULL auto_increment,
refid int(10) unsigned NOT NULL default '0',
titel text,
tekst text,
tid timestamp(14) NOT NULL,
author_id int(10) unsigned NOT NULL default '0',
hits int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id),
KEY author_id (author_id),
KEY tid (tid)
) TYPE=MyISAM;
CREATE TABLE users (
id int(10) unsigned NOT NULL auto_increment,
username varchar(64) NOT NULL default '',
password varchar(64) NOT NULL default '',
realname varchar(255) NOT NULL default '',
email varchar(255) NOT NULL default '',
website varchar(255) NOT NULL default '',
notes text NOT NULL,
adresse text NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY username (username)
) TYPE=MyISAM;
Det fungerer på den måde at når der oprettes en ny tråd i forummet sættes refid=0 på det pågældende indlæg. På alle svar på dette indlæg sættes refid = <id på parent indlæg>.
I mit query ønsker jeg at hente alle indlæg der har refid=0, antal svar på indlægget, forfatter id og username, oprettelsesdato, antal hits og tidspunkt, id og username for den sidst oprettede kommentar i tråden.
Indtil videre er det også lykkedes meget godt, men den henter kun de indlæg der er svar i, og springer let hen over dem hvor der ikke er. Det kan have noget at gøre med at n_* felterne jo selvfølgelig vil blive null.
Lad mig høre om nogen kan hjælpe - her er mit query som det ser ud nu:
SELECT
f.id,
f.titel,
f.hits,
UNIX_TIMESTAMP(f.tid) as dato,
u.username,
f.author_id,
COUNT(fm.id) as antal,
u2.username as n_username,
UNIX_TIMESTAMP(fm.tid) as n_dato,
u2.id as n_author_id
FROM
forum_main as f,
users as u,
forum_main as fm,
users as u2
WHERE
(u.id = f.author_id) AND
(f.refid = '0') AND
(fm.refid = f.id) AND
(u2.id = fm.author_id)
GROUP BY
f.id
ORDER BY
f.tid DESC
LIMIT
0,2000
På forhånd tak :)