Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> system reklam
jarmiar
post 13.03.2012, 13:58:55
Post #1





Grupa: Zarejestrowani
Postów: 616
Pomógł: 12
Dołączył: 16.07.2006
Skąd: : getCity ( );

Ostrzeżenie: (0%)
-----


potrzebuje zrobic system reklam, w ktorym beda losowane reklamy z danego miejsca

system musi losowac czesciej reklamy te, ktore maja wiecej odslon jeszcze do wykorzystania, czyli jakby wieksze ratio ( current_views / total_views)

macie jakieś pomysły jak wydajnie to zrobić? chciałbym to zrobić za pomocą jednego zapytania do bazy


--------------------
Jeśli my czegoś nie zrobimy, zrobią to za nas inni
Go to the top of the page
+Quote Post
cudny
post 13.03.2012, 14:48:45
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM db WHERE id IN(
  2. SELECT id FROM db ORDER BY ratio DESC LIMIT 20
  3. UNION
  4. SELECT id FROM db ORDER BY rand() LIMIT 10
  5. ) ORDER BY rand() LIMIT 15


Pobiera 20 najwyzej ratowanych + 10 losowych i losuje z nich 15 do wyniku smile.gif
Nie sprawdzałem czy składnia odpowiednia, ale powinno hulać.


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
by_ikar
post 13.03.2012, 15:43:31
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


@cudny, brakuje jeszcze update, które by odejmowało liczbę wyświetleń która została, lub dodawało kolejne, w zależności jak kto woli to wykonać.

BTW to że zapytanie będzie w jednej linijce, wcale nie oznacza że jest to jedno zapytanie.
Go to the top of the page
+Quote Post
cudny
post 13.03.2012, 16:41:58
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


To była odpowiedź ogólna, czy będzie update czy nie to nie mój interes wink.gif

A co do pytania w wielu linijkach, można by się sprzeczać bo wykorzystujesz jedną instancję i parser mysql wykorzystywany jest raz do całości zapytania

smile.gif


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
jarmiar
post 23.03.2012, 14:32:27
Post #5





Grupa: Zarejestrowani
Postów: 616
Pomógł: 12
Dołączył: 16.07.2006
Skąd: : getCity ( );

Ostrzeżenie: (0%)
-----


Dostaje taki błąd:

Incorrect usage of UNION and ORDER BY


--------------------
Jeśli my czegoś nie zrobimy, zrobią to za nas inni
Go to the top of the page
+Quote Post
absflg
post 23.03.2012, 17:49:50
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.11.2011

Ostrzeżenie: (0%)
-----


Może tak:
  1. SET @id = 0, @number = FLOOR(RAND()*(SELECT SUM(odslon) FROM reklamy))+1;
  2.  
  3. SELECT IF (@id=0,
  4. IF(@number-odslon<=0,
  5. @id := id,
  6. @number := @number-odslon
  7. ),
  8. 1
  9. ) FROM reklamy;
  10.  
  11. SELECT @id;

(Zakłada, że masz tabele `reklamy` z polami `id` i `odslon` zawierającym liczbę pozostałych odsłon.)
Dla przykładu: Gdy reklama 1 ma 10 odsłon, reklama 2 ma 3 odsłony, a reklama 3 ma 100 odsłon, to szansa jest jak 10:3:100.

Na koniec dostajesz id wylosowanej reklamy (zmień sobie to ostatnie zapytanie na takie z WHERE id = @id).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 23:10