DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > DevProTalk > Sva početnička pitanja
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

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.

Odgovori
 
Alati teme Način prikaza
Staro 15. 10. 2007.   #1
shoba
profesionalac
Qualified
 
Avatar shoba
 
Datum učlanjenja: 09.06.2005
Poruke: 165
Hvala: 0
3 "Hvala" u 3 poruka
shoba is on a distinguished road
Default Kako realizovati FIFO buffer u PHPu

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
shoba je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #2
misk0
majstor
Wrote a book
 
Avatar misk0
 
Datum učlanjenja: 30.01.2006
Lokacija: Lugano - Switzerland
Poruke: 1.251
Hvala: 219
106 "Hvala" u 67 poruka
misk0 će postati "faca" uskoromisk0 će postati "faca" uskoro
Pošaljite ICQ poruku za misk0 Pošaljite poruku preko Skype™ za misk0
Default

Ne moras brisati najstarijeg pa insertovati novi, samo updateujes (overwrite) taj najstariji sa novim podacima.
misk0 je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #3
benjamin
omladinac
Certified
 
Datum učlanjenja: 03.09.2006
Lokacija: beograd
Poruke: 78
Hvala: 17
4 "Hvala" u 4 poruka
benjamin is on a distinguished road
Pošaljite poruku preko Skype™ za benjamin
Default

Citat:
Originalno napisao shoba Pogledajte poruku
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?
Generalno nema potrebe da pamtiš datum, ukoliko optimizuješ bazu, mada je preporučljivo jer ko zna za šta će ti posle zatrebati. ako je baza lepo podešena id polja će ti fino raditi taj deo posla.

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
benjamin je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #4
misk0
majstor
Wrote a book
 
Avatar misk0
 
Datum učlanjenja: 30.01.2006
Lokacija: Lugano - Switzerland
Poruke: 1.251
Hvala: 219
106 "Hvala" u 67 poruka
misk0 će postati "faca" uskoromisk0 će postati "faca" uskoro
Pošaljite ICQ poruku za misk0 Pošaljite poruku preko Skype™ za misk0
Default

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.

Citat:
Originalno napisao benjamin Pogledajte poruku
e da nije mi samo jasan taj uslov ukoliko ima manje od 10 poseta upisuješ posetu ? valjda bi je upisivao u svakom slučaju
Pa na pocetku, kod novoregistrovanih korisnika koji nemaju ni jednu 'posjetu'.
misk0 je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #5
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

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.
ivanhoe je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #6
kodi
133t
Master
 
Avatar kodi
 
Datum učlanjenja: 07.01.2006
Lokacija: Beograd
Poruke: 714
Hvala: 16
37 "Hvala" u 28 poruka
kodi is on a distinguished road
Pošaljite ICQ poruku za kodi
Default

-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.
kodi je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #7
kodi
133t
Master
 
Avatar kodi
 
Datum učlanjenja: 07.01.2006
Lokacija: Beograd
Poruke: 714
Hvala: 16
37 "Hvala" u 28 poruka
kodi is on a distinguished road
Pošaljite ICQ poruku za kodi
Default

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.
kodi je offline   Odgovorite uz citat
Staro 15. 10. 2007.   #8
noviKorisnik
Dejan Katašić
Wrote a book
 
Avatar noviKorisnik
 
Datum učlanjenja: 10.06.2005
Lokacija: Novi Sad
Poruke: 1.017
Hvala: 129
86 "Hvala" u 43 poruka
noviKorisnik će postati "faca" uskoro
Default

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.
noviKorisnik je offline   Odgovorite uz citat
Staro 16. 10. 2007.   #9
filjo
novi član
Na probnom radu
 
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
filjo is on a distinguished road
Default

nemoj ni da pravis novu tabelu, dodaj samo polje posete varchar(200) u korisnike

PHP kôd:
$posete // iz tabele
$koID // ID posetioca

$posete=str_replace($koID.';','',$posete); 
if (
substr_count($posete,';')>=10)
    
$posete=substr($posete,strpos(';',$posete)+1
$posete.=$koID.';'// dodavanje na kraj


// ispis

$arr=explode(';',$posete);
for (
$i=count($arr)-2;i>=0;$i--)
    echo 
'userID='.$arr[$i]; 
tako nekako, a puno brze
filjo je offline   Odgovorite uz citat
Staro 16. 10. 2007.   #10
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

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!
bluesman je offline   Odgovorite uz citat
2 članova zahvaljuje bluesman za poruku:
Odgovori



Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
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


Vreme je GMT +2. Trenutno vreme je 22:25.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.