Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Struktura bazy danych forum., Jak zrobić aby było naj naj naj.
marshallb
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 15.02.2007

Ostrzeżenie: (0%)
-----


Chciałem zrobić forum opierające się na prostych tabelach.

Tematy
id, tytul, autor_id

Posty
id, temat, data, autor_id, tresc

Userzy
id, imie

Wszystko z początku jest tak idealnie proste ale... gdybym chciał zrobić teraz bardzo podstawową rzecz jaką jest wyświetlanie posortowanych tematów w których ktoś się ostatnio wypowiadał musiałbym w zapytaniu:
1. Znaleźć najnowsze posty z niepowtarzającymi się 'temat'.
2. Przyłączyć 'imie' autora.
3. Przyłączyć 'tytul' i 'autor_id' tematu
4. Przyłączyć 'imie' autora tematu.

Wyszłoby z tego dużo JOINów. Tylko stwierdzając po ostatnich poszukiwaniach jest to w ogóle niemożliwe ponieważ odnajdując najnowsze posty poprzez MAX(data) i GROUP BY 'temat' nie otrzymuje się wcale rekordu zawierającego tę skrajną wartość. Manual MySQL podaje takie głupie rozwiązanie - nie dostaje rekordu tylko rekord zawierający skrajną wartość, a takich może być wiele.

Innym sposobem na sortowanie takiej listy mogłoby być wyszukanie tematów i posortowanie ich wg dat postów, ale wtedy też trzeba GROUP BY 'temat'...

Pewnie zrobienie takiego jednego skomplikowanego zapytania jest mniej wydajne (o ile możliwe bo mi się nie udało) niż umieszczenie w tabeli Tematy nowej kolumny 'ostatni_post_id' i 'ostatni_post_data' i zmienianie jej za każdym razem kiedy dodaje się lub usuwa ostatniego posta.
Czy ktoś próbował?

Jak budujecie fora?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marshallb
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 15.02.2007

Ostrzeżenie: (0%)
-----


Nie chce być namolny ale... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) w ten sposób nie uzyskam id i autor_id ostatnich postów.
MAX(p.data) zwraca tylko tę jedną wartość bez reszty rekordu. To właśnie ten problem z manula MySQL z nic nie rozwiązującym rozwiązaniem przez subquery.

Mi chodzi o to żeby po jednym zapytaniu, przy tak zbudowanych tabelach uzyskać następujące dane:
- id tematu
- tytuł tematu
- id autora tematu
- nicka autora tematu
- date ostatniego posta
- id autora ostatniego posta
- nicka autora ostatniego posta

Wszystko ORDER BY ostatni post DESC.

Aha, i jeszcze do tego wszystkiego ilość postów w każdym temacie.

I udało mi się to zrobić bardzo zawiłymi JOINami ale albo tematy się powtarzały albo przy innym sposobie info o ostatnich postach było o pierwszych postach w temacie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 13:40