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?