|
Sva početnička pitanja Sva početnička pitanja bi trebala da se postavljaju u ovom forumu, a ako se pretvori u kvalitetnu diskusiju interesantnu svima - prebacićemo je u odgovarajući forum. Molimo "znalce" da ne omalovažavaju početnike, ako žele da pomognu svi ćemo biti zahvalni, ako ne žele, neka preskoče ovaj forum. |
![]() |
|
Alati teme | Način prikaza |
|
![]() |
#1 |
profesionalac
Qualified
Datum učlanjenja: 09.06.2005
Poruke: 165
Hvala: 0
3 "Hvala" u 3 poruka
![]() |
![]() Kako realizujete FIFO buffer u PHPu?
Da bih bio jasniji dacu jedan primer FIFO buffera. Na primer, treba napraviti opciju da se zapisuje poslednjih 10 posetilaca necijeg licnog profila ili stranice. Dakle, za svaki profil bih u bazi zapisivao poslednjih 10 usernameova koji su ga posetili. Da li bi resenje bilo sledece: - pri svakoj novoj poseti profila proveravam koliko je poseta imao taj profil - ako je imao manje od 10, zapisujem novi red - ako je imao vise od 10 brisem najstarijeg iz tabele (znaci da sam uz username pamtio i datum) i upisujem novi Ima li neko elegantnije/logicnije/brze resenje?
__________________
Natalna karta |
![]() |
![]() |
![]() |
#2 |
majstor
Wrote a book
|
![]() Ne moras brisati najstarijeg pa insertovati novi, samo updateujes (overwrite) taj najstariji sa novim podacima.
|
![]() |
![]() |
![]() |
#3 | |
omladinac
Certified
|
![]() Citat:
dakle ako imaš tabelu visits [id, who, whom], jednostavan select * from visits where whom = 'ime_profila' order by id desc /*ili datum ukoliko ga koristis */ limit 0, 10; na taj način izbegneš brisanje iz baze, realno niko ne voli brisanje iz baze ![]() ukoliko dodaš datum, možeš ovo koristiti i za neku lepu statistiku (ukoliko ne brišeš rekorde) e da nije mi samo jasan taj uslov ukoliko ima manje od 10 poseta upisuješ posetu ? valjda bi je upisivao u svakom slučaju |
|
![]() |
![]() |
![]() |
#4 |
majstor
Wrote a book
|
![]() Da, ali tako pamti SVE MOGUCE posjete, sto vremenom u zavisnosti od broja korisnika moze da bude... ogromna kolicina podataka. Isto tako, ukoliko jedan korisnik posjeti 3 puta nekoga bice 3 puta njegov nick na listi. Znaci samo insertovanje bas i nije mudra odluka.
Pa na pocetku, kod novoregistrovanih korisnika koji nemaju ni jednu 'posjetu'. |
![]() |
![]() |
![]() |
#5 |
Ivan Dilber
Sir Write-a-Lot
|
![]() jos jednostavnije, napravi inicijalno svakom po 10 dummy recorda za posete, i onda samo radi update najstarijeg recorda:
Kôd:
UPDATE tabela SET name='nesto_novo' WHERE id=(SELECT id FROM tabela ORDER BY datum LIMIT 1)
__________________
Leadership is the art of getting people to want to do what you know must be done. |
![]() |
![]() |
![]() |
#6 |
133t
Master
|
![]() -napravis autoincrement id
-ubacis novi record //losije resenje -prebrojis recorde -ako ih imas vise od 10, obrises onaj sa najmanjim id-om //malo bolje resenje -obrises sve sto ima id manji od (next_auto_id-10) edit: i meni je palo na pamet nesto slicno kao sto je rekao ivanhoe, osim sto tu ne mozes da budes siguran da imas tacno 10 recorda, ali to jeste najbrze resenje jer nema brisanja Poslednja izmena od kodi : 15. 10. 2007. u 22:18. |
![]() |
![]() |
![]() |
#7 |
133t
Master
|
![]() Off Topic: btw, ovo mu vise dodje round-robin nego FIFO ![]() a evo i detaljnog resenja (uz pomoc trigera) http://www.shinguz.ch/MySQL/rrd.pdf Poslednja izmena od kodi : 15. 10. 2007. u 22:44. |
![]() |
![]() |
![]() |
#8 |
Dejan Katašić
Wrote a book
Datum učlanjenja: 10.06.2005
Lokacija: Novi Sad
Poruke: 1.017
Hvala: 129
86 "Hvala" u 43 poruka
![]() |
![]() Ako sam dobro razumeo, želiš uređenu listu poslednjih 10 posetilaca profila.
Ok, ako ih nije bilo 10, onda će biti manje, no to i ne može da pravi neki problem. Ono što je interesantno, to je - šta ukoliko u poslednjih 10 poseta ima više poseta od istog korisnika (mora da je neki prijatelj onda)? Ako tražimo poselednjih 10 posetilaca, onda mu se priznaje samo jedna poseta, a pošto treba da bude uređena lista, to se računa samo najsvežija poseta, odnosno treba da nestane prethodna koja je bila tu, isplivavanje posetioca, efekat mehurića :-) Recimo, stavimo tabelu posete, 3 polja: domaćin, gost i vreme posete, primarni ključ na domaćinu i gostu, dodatni indeks za domaćina. Pa onda - dolazak gosta: - ubaci da je gost posetio domaćina sad. ... ako javi da je affected_rows < 0, znači da je gost već ranije dolazio, pa treba njihov zapis to da se osveži sadašnjim trenom. Uređena selekcija poslednjih 10: - odaberi goste i njihovo vreme kad su bili kod ovog domaćina, ređaj po svežini i da ih ne bude više od 10. Vidiš da nigde ne spominjem brisanje ... ne znam koliki broj zapisa bi trebao da bude da ovo počinje da guši, ako imaš 1000 korisnika i svi socijalni manijaci pa se međusobno isposećuju, to bi bilo blizu milion zapisa, pa ti vidi ima li potrebe. |
![]() |
![]() |
![]() |
#9 |
novi član
Na probnom radu
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
![]() |
![]() nemoj ni da pravis novu tabelu, dodaj samo polje posete varchar(200) u korisnike
PHP kôd:
|
![]() |
![]() |
![]() |
#10 |
Goran Pilipović
Sir Write-a-Lot
|
![]() Ako želiš mene da poslušaš, napraviš tabelu posete (user_id, visitor_id, timestmap) i samo ubacuješ u tu tabelu, a onda kroz neko cron jednom dnevno obrišeš sve upise starije od mesec dana.
Na taj način: - ne opterećuješ user tabelu dodatnim poljem - ne upisuješ / brišeš svaki čas veš samo upisuješ a brišeš jednom dnevno - ne "maltretiraš" users tabelu već drugu tabelu koja je daleko manje bitna - useri sa puno poseta će ti biti zahvalni, useri sa malo poseta ne zauzimaju prostor. Ne znam koliko je bitno da bude baš tačno 10 poslednjih, ako jeste možeš iz tabele da kupiš samo tih poslednjih 10 i to je to.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
![]() |
![]() |
2 članova zahvaljuje bluesman za poruku: |
![]() |
Alati teme | |
Način prikaza | |
|
|
![]() |
||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Kako otkriti kako je neko provalio u sajt | Aleksandar.Ilic | Web Hosting, web serveri i operativni sistemi | 41 | 21. 03. 2008. 22:45 |