Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z datą
Forum PHP.pl > Forum > Przedszkole
bemol
Witam. Otóż mam problem przy pisaniu forum. Jak wiadomo forum przeważnie zawiera działy, a w nich tematy. I tutaj zaczyna się moje pierwsze pytanie:
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:
  1. CREATE TABLE `BoardPosts` (
  2. `PostID` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `PostDate` datetime NOT NULL,
  4. `PostUser` smallint(5) UNSIGNED NOT NULL,
  5. `PostThread` smallint(5) UNSIGNED NOT NULL,
  6. `PostContent` varchar(5000) NOT NULL,
  7. `PostTopic` varchar(3) NOT NULL DEFAULT 'No',
  8. PRIMARY KEY (`PostID`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;

  1. CREATE TABLE `BoardThreads` (
  2. `ThreadID` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `ThreadBoard` tinyint(3) UNSIGNED NOT NULL,
  4. `ThreadTitle` varchar(50) NOT NULL,
  5. `ThreadStatus` varchar(10) NOT NULL DEFAULT 'Open',
  6. `ThreadDisplays` smallint(5) UNSIGNED NOT NULL,
  7. PRIMARY KEY (`ThreadID`)
  8. ) 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?
Kicok
Rozwiązanie 2.


Posts:
- post_id
- topic_id
- author_id
- content
- date

Topics:
- topic_id
- board_id
- first_post_id
- last_post_id
- posts_count
- title


Pobieranie postów z tanego tematu: 1 zapytanie z JOIN-em
Dodawanie nowego postu: INSERT na tabeli posts, UPDATE na topics
Zakładanie nowego tematu: INSERT na tabeli topics, mysql_insert_id" title="Zobacz w manualu PHP" target="_manual, INSERT na tabeli posts
bemol
a jak mogłoby wyglądać zapytanie pobierające rekordy? bo mam z tym problem :/

edit: juz nie trzeba tongue.gif

teraz mam problem z przerobieniem tego zapytania:
  1. <?php
  2. $DB->Query("SELECT BoardThreads.*,Users.*, BoardPosts.*, COUNT(PostID) as PostCount FROM BoardThreads LEFT JOIN BoardPosts ON PostThread=ThreadID LEFT JOIN Users ON UserID=ThreadUser WHERE ThreadBoard='".$_GET['boardid']."' GROUP BY ThreadID ORDER BY ThreadPostLast DESC;");
  3. ?>


tak aby móc wyciągnąć date ostatniego posta, a nie pierwszego, jak jest teraz
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.