Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie forum wg daty forum i komentarz
Forum PHP.pl > Forum > Bazy danych > MySQL
tsharek
Witam smile.gif mam taką bazę:
[sql:1:8e853dddd6]
forum_topic(
id int not null auto_increment,
topic varchar(100),
tekst text,
xywa varchar(20),
data datetime,
primary key (id) );

forum_komentarz(
id int not null auto_increment,
id_topic int,
tekst text,
xywa varchar(20),
data datetime,
primary key (id) );
[/sql:1:8e853dddd6]

czyli prosta, standardowa baza na proste forum. i teraz przy wyświetlaniu topiców chciałbym posegregować je wg daty topicu i komentarzy, tak samo jak jest to na tym forum. tzn. jak jest jakiś topic bez komentarzy to żeby go sortowało wg jego daty, a jak post jest z jakimiś komentarzami to żeby topic posortował wg. daty najnowszego komentarza. czyli prosto: jak dodamy post do topica to żeby ten topic wyświetlał się jako pierwszy:) Używam MySqla 4.0 więc podwójne zapytania niestety nie wchodzą w grę sad.gif a chciałbym to zrobić jednak w jednym zapytaniu. Da się tak wogle?
cboot
Najekonomiczniej jest dodać w tematach pole aktualizacja, w którym będzie data ostatniej aktualizacji tematu i przy wstawianiu każdego komentarza, aktualizować tą datę. Wtedy przy wyświetlaniu wystarczy jedynie posortować wg pola akutalizacja i jest to o niebo ekonomiczniejsze.
[sql:1:45ce578f30]forum_topic(
id int NOT NULL AUTO_INCREMENT,
topic varchar(100),
tekst text,
xywa varchar(20),
data datetime,
aktualizacja datetime,
primary KEY (id) );[/sql:1:45ce578f30]
tsharek
tego właśnie chciałem uniknąć - chcę zbudować zapytanie i baze jak najbardziej ekonomicznie. a dodatkowe pole takim rozwiązaniem napewno nie jest smile.gif wydaje mi się że jest jakis sposób smile.gif jakimiś ifami albo case-ami?
Liko
Baza może i będzie bardziej ekonomiczniejsza, ale wykonywanie skryptu w php napewno nie.
tsharek
a co ma do tego php?smile.gif raczej php będzie też ekonomiczniejszy bo zamiast paru zapytań (updejt tabeli topic przy każdym dodaniu komentarza) beedzie jedno większe - najwyżej mysql będzie troszke wolniejszy, no ale to tesz sprawa sporna - wkońcu 1 zapytanie się wykona większe nisz 2 mniejsze. tak więc czekam na inne sugestie
cboot
Proporcje są raczej takie, że dużo częściej się przegląda tematy niż dodaje nowe posty. Tak więc jeśli konsekwencją mojej propozycji byłoby to, że przy wstawianiu posta musiałbyś updatować dwie tabele, ale przy przeglądaniu wystarczyłoby jedno proste posortowanie po dacie ostatniej aktualizacji, a nie łączenie dwóch tabel, to nie wiem, czy nie jest to warte zachodu.

Jeśli jednak to Cię nie zadowala, to warto by się przybliżyć do tego, jak jest zbudowane to forum, a więc usunąć z tabeli forum_topic pole tekst i pierwszy post, a więc ten pisany przez autora topicu w momencie jego zakładania umieszczać w tabeli forum_komentarz. Wtedy jest jaśniejsza sytuacja i wtedy możesz zrobić zwyczajnie coś w stylu:
[sql:1:224c784b85]select t.topic, max(k.data) aktualizacja from forum_komentarze k, forum_topic t where t.id = k.id_topic group by t.id order by aktualizacja desc[/sql:1:224c784b85]
To już powinno być bardziej po Twojej myśli.
tsharek
w sumie to jest zajebista myśl:) nie wpadłem na to żeby 1 post czytać jako komentarz:) to bardzo uławti właśnie w sortowaniu:) punkcik przyznany:) jeszcze raz thenx
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.