tsharek
22.05.2004, 14:06:56
Witam

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ę

a chciałbym to zrobić jednak w jednym zapytaniu. Da się tak wogle?
cboot
22.05.2004, 15:49:26
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
22.05.2004, 17:08:58
tego właśnie chciałem uniknąć - chcę zbudować zapytanie i baze jak najbardziej ekonomicznie. a dodatkowe pole takim rozwiązaniem napewno nie jest

wydaje mi się że jest jakis sposób

jakimiś ifami albo case-ami?
Liko
22.05.2004, 17:12:22
Baza może i będzie bardziej ekonomiczniejsza, ale wykonywanie skryptu w php napewno nie.
tsharek
22.05.2004, 17:35:12
a co ma do tego php?

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
22.05.2004, 18:10:28
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
22.05.2004, 19:03:18
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.