![]() |
![]() ![]() |
![]() |
![]() ![]()
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 1 Dołączył: 12.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ostatni post z dołączonym tytułem tematu i imieniem użytkownika który napisał ten post wygląda tak:
Rozumiem że posty.temat to raczej temat_id. Pozdrawiam. Ten post edytował tomaszdurka 16.02.2007, 13:12:01 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 15.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Problem to jak z takich tabel uzyskać tematy posortowane wg dat ostatnich postów.
Połączyć je z resztą informacji jest łatwo. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 1 Dołączył: 12.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 15.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie chce być namolny ale...
![]() 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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 12:49 |