[ vilyu @ 20.07.2002. 09:43 ] @
Cao svima! Imam problemcic sa news sistemom s kojim vezbam. Dakle: Na desnom delu sajta na kom vezbam prikazujem poslednje cetiri unete vesti kojima je pridruzena jedinstvena sifra iz baze. Klikom na jednu od tih vesti, sifra se
prosledjuje strani vesti.php koja bi trebalo da prikaze tu i jos 9
prethodnih vesti u opadajucem poretku. Ako imam 20 vesti i obrisem
pretposlednju, znaci sa sifrom 19, trebalo bi da klikom na vest sa sifrom 18
prikazem 20, 18, 17, 16, 15, 14, 13, 12, 11, 10. E sad, tu nastaje problem
jer sam upit formulisao ovako:
SELECT id, datum, vest FROM vesti ORDER BY id DESC LIMIT ($max-$id), 10
pri cemu je $max sifra poslednje vesti, a $id sifra trazene vesti. Ovaj upit
perfektno radi kada ne brisem vesti, ali kada obrisem pomenutu 19-u, on ce
prvo obrnuti redosled (da bi najnovija vest bila prva), a zatim reci
20-18=2, sto znaci kreni od trece (0,1,2) prikazane, a to je vest sa sifrom
17, a ne 18! Razmisljao sam da belezim broj obrisanih poruka, ali kako one
ne moraju biti za redom, ta varijanta otpada. Takodje, podesavanje teksta
neke vesti na nulu uzrokuje prikaz manje od deset vesti, sto je
neprihvatljivo. Kakvim upitom biste vi ovo resili? Hvala.
[ krvopije @ 20.07.2002. 10:14 ] @
Najbolje ti je da u SQL bazi formiras kolonu npr DATUM u koju ce se upisivati tacan datum i vrijeme unosenja vijesti tako da nikada neces imati vijest sa istim datumom i vremenom. Kada izaberes neku od one cetiri vijesti pokupi njen datum i onda u SQL upitu izaberi to vijest i jos 9 koje imaju raniji datum-vrijeme od nje. Tako da prilikom brisanja vijesti upit ce i dalje da ti radi (postojeci SQL upit prepravi)

Valjda je pomoglo
[ Mihailo @ 20.07.2002. 16:28 ] @
Jednostavno selektuj više vesti nego što ti treba, recimo hoćeš 20, selektuj 30
primer
Code:

$max=(mysql_query(SELECT COUNT (*) FROM vesti))-30;
$vesti=mysql_query("select * from vesti where id>$max order by id desc");


I onda lepo kroz while ili nekako drugačije prikažeš samo poslednjih 20

Code:
 
$brv=0;
  while($row=(mysql_fetch_array($vesti))and($brv<20))
    {
    echo(' ... vest ... ');
    $brv++;
    }


Naravno, ima lepših i boljih rešenja, ovo mi je trenutno palo na pamet.
[ Riste Pejov @ 20.07.2002. 21:17 ] @
kad insertujes vesti, onda u koloni za datum ubaci NOW() vrednost,
ali kolona datum MORA biti DATETIME.
tako da vesti imaju i vreme dana kad su ubaceni, onda sortiraj po DATUM koloni
ako sam dobro shvatio onda ovo bi uradilo stvar
Code:

SELECT id, datum, vest FROM vesti WHERE datum<$t_datum ORDER BY datum DESC LIMIT 10 

gde $t_datum je vrednost kolone datum za vest koja je izabrana iz browser-a

i onda on prikaze 10 prethodne vesti koji su undeti pre od izabrane