Potrebujem vybrať dáta zo štyroch tabuliek naraz a nejako sa v tom už strácam. Bojím sa, že aj keď to nejako rozchodím, nebude to v nejakom hlúpom prípade fungovať a teda to nebude 100% správne.
Preto prosím, pomôžte
4 tabulky, orezané o nepodstatné stĺpce
(V podstate jednoduchý systém - Užívateľ založí topic. Ten obsahuje komenty. Topic má hodnotenie od užívateľa, komenty majú zase approve (súhlasím/nesúhlasím))
Kód: Vybrať všetko
CREATE TABLE Users
(
user_id int(11) NOT NULL AUTO_INCREMENT,
name VARCHAR (128) NOT NULL ,
PRIMARY KEY (user_id) ,
)
;
CREATE TABLE Topics
(
topic_id int(11) NOT NULL AUTO_INCREMENT,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
ttext TEXT NOT NULL ,
user_id int(11) NOT NULL ,
PRIMARY KEY (topic_id) ,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ,
)
;
CREATE TABLE Comments
(
comment_id int(11) NOT NULL AUTO_INCREMENT,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
approve BOOLEAN NOT NULL ,
hidden BOOLEAN NOT NULL ,
ctext TEXT ,
user_id int(11) NOT NULL ,
topic_id int(11) NOT NULL ,
PRIMARY KEY (comment_id) ,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ,
FOREIGN KEY (topic_id) REFERENCES Topics(topic_id)
)
;
CREATE TABLE Rating
(
rating_id int(11) NOT NULL AUTO_INCREMENT ,
value int(11) NOT NULL ,
user_id int(11) NOT NULL ,
topic_id int(11) NOT NULL ,
PRIMARY KEY (rating_id) ,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ,
FOREIGN KEY (topic_id) REFERENCES Topics(topic_id)
)
;
Topics.topic_id
Topics.created
Topics.ttext
Users.name
Count(Comments.topic_id) - počet neskrytých! komentov k topicu (WHERE Comments.hidden = 0)
Rating.value - pre daný topic WHERE user_id = $premenna, hodnotenie prihláseného užívateľa
Comments.approve- postoj prihláseného užívateľa k Topicu. Takže ak má koment k danému topicu, zobrazí approve. Ak koment nemá, nechá trebárs NULL.
Táák a ako toto, prosím vás, napchať do jediného dotazu?
Spoľahlivo viem ešte vytiahnuť z dvoch tabuliek
Kód: Vybrať všetko
SELECT Topics.topic_id,
Topics.created,
Topics.ttext,
Users.app_name
FROM Topics JOIN
Users ON (Topics.user_id = Users.user_id)
WHERE Topics.hidden = 0 AND
ORDER BY Topics.created;K tým komentom, skúšal som niečo takéto, ale je to zle. Neviem prečo, ale aj preto sem píšem...
Kód: Vybrať všetko
SELECT Topics.topic_id,
Topics.created,
Topics.ttext,
Users.app_name
COUNT(Comments.topic_id) AS commentsCount
FROM Topics
JOIN Users ON (Topics.user_id = Users.user_id)
JOIN Comments ON (Topics.topic_id = Comments.topic_id)
WHERE Topics.hidden = 0 AND
Comments.hidden = 0 AND
ORDER BY Topics.created;