Które rozwiązanie jest bardziej optymalne:
1. Przy zakładaniu tematu: tytuł i treść tematu całość zapisujemy do tabeli z tematami, czyli np:
id=1
date=now()
title=tytul tematu
content=tresc tematu
autor=autor tematu
board=dzial tematu
a pod tematem wyświetlane posty (odpowiedzi)
Ogólnie rzecz biorąc: treść tematu nie jest postem.
2. Przy zakładaniu tematu tytuł,id,board zostaje zapisana do tabeli z tematami, a autor,data,id,content idzie do tabeli z postami?
Które z nich?
Z pierwszym mam problem, bo przy zapytaniu do bazy nie moge dac ORDER BY ThreadDate and PostDate naraz. Czyli albo tematy będą wyświetlane wg Dat ostatniego posta, albo wg daty założenia tematu. Niby wszystko dobrze, tylko że jak w danym temacie nie ma posta to temat jest na szarym koncu, mimo ze zostanie on zalozony jako ostatni. Jak to rozwiązać?
Z drugim też jest problem, bo musze tworzyć dwa zapytania.
pierwsze do tabeli threads, drugie do posts. W czym problem?
Ano moje tabele wyglądałyby tak:
CREATE TABLE `BoardPosts` ( `PostID` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, `PostDate` datetime NOT NULL, `PostUser` smallint(5) UNSIGNED NOT NULL, `PostThread` smallint(5) UNSIGNED NOT NULL, `PostContent` varchar(5000) NOT NULL, `PostTopic` varchar(3) NOT NULL DEFAULT 'No', PRIMARY KEY (`PostID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;
CREATE TABLE `BoardThreads` ( `ThreadID` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, `ThreadBoard` tinyint(3) UNSIGNED NOT NULL, `ThreadTitle` varchar(50) NOT NULL, `ThreadStatus` varchar(10) NOT NULL DEFAULT 'Open', `ThreadDisplays` smallint(5) UNSIGNED NOT NULL, PRIMARY KEY (`ThreadID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;
Pole PostTopic miałoby wartość Yes jeśli byłby to post który byłby "treścią" tematu. Tylko przy zapisywaniu do bazy danych byłby problem z polem PostThread ponieważ w 1 zapytaniu do tabeli threads automatycznie dodawałby id (kolejne), a przy zapisywaniu do bazy potrzebne było by mi to id w tabeli post, zeby post miał jak się odwołać do tematu, żeby był z nim powiązany.
Co radzicie w takiej sytuacji?