![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Mam zamiar napisać system, w którym ludzie dodają jakieś tam teksty czy linki, które następnie są wyświetlane na odpowiedniej stronie.
Powiedzmy, że za wyświetlenie linku/tekstu ten rekord dostaje punkt. I teraz, chciałbym zrobić tak, że każdy tekst ma szansę na pojawienie się na pierwszej stronie (poprzez losowanie), ale także jednocześnie im większa liczba punktów, tym większa szansa na wyświetlenie. Powiedzmy, że mam taką tabelkę: |ID|Zawartość|Punkty| |1 |Coś tam | 100 | itd... Czy jest to możliwe z poziomu zapytania (np. z pomocą RAND()), czy muszę pobrać wszystkie rekordy i odpowiednio wybrać z poziomu PHP? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 389 Pomógł: 141 Dołączył: 11.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Możesz zrobić wybór i losowanie w zapytaniu mysql np.
Wylosuje 2 rekordy które mają więcej niż 90 punktów. Metoda ta jest wolna, więcej http://akinas.com/pages/en/blog/mysql_random_row/ Ten post edytował athei 28.07.2009, 09:57:06 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Mi bardziej chodzi o coś takiego:
Jeśli pkt. = 2 to tak jakbym miał dwa rekordy o tym ID. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 9 Dołączył: 21.05.2004 Skąd: Glogau/Breslau Ostrzeżenie: (0%) ![]() ![]() |
Możesz zrobić wybór i losowanie w zapytaniu mysql np.
Wylosuje 2 rekordy które mają więcej niż 90 punktów. Metoda ta jest wolna, więcej http://akinas.com/pages/en/blog/mysql_random_row/ Albo
Gdzie N to górne ograniczenie na maksymalną liczbę punktów (albo i bez ograniczenia). Wtedy wpisy z mniejszą liczbą punktów będą się pojawiały rzadziej. Możesz też @smietek właśnie przerobić bazę i dodawać po pare tych samych rekordów, w zależności od liczby punktów (chociaż to troche głupie przy dużej liczbie punktów). Można też inaczej. Dodajesz dwa pola `a0` i `a1` do swojej tabeli. Przy dodawaniu nowego wpisu będziesz wybierał maksymalną wartość po wszystkich `a1` i zapisywał jako `a0` nowego wpisu. Jako `a1` zapiszesz nowe `a0`+liczba punktów. Potem przy wybieraniu losujesz liczbę mniejszą niż MAX(a1) i szukasz wpisu, w którego przedział [a0,a1] się wstrzeliłeś. Jeśli nie ma takiego wpisu (bo np został usunięty) - to losujesz jeszcze raz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:48 |