Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> RANDOM() w MySQL na podstawie wagi - jak?
fifjak
post 11.08.2014, 13:17:57
Post #1





Grupa: Nieautoryzowani
Postów: 6
Pomógł: 0
Dołączył: 19.05.2014

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


Mam tabelkę w postaci:

+----+-------+------------------+
| id | nazwa | liczba_wystapien |
+----+-------+------------------+
| 1 | Aaaa | 256987 |
| 2 | Bbbb | 12546 |
| 3 | Cccc | 1245 |
+----+-------+------------------+

Chcę wyciągnąć z tej tabeli losowy wiersz, ale w zależności od kolumny liczba_wystapien, tj. tak, żeby te wiersze, które mają wyższą liczbę wystąpień były zwracane częściej niż te z niższą liczbą wystąpień.

Jak to najprościej rozwiązać w MySQL?
Go to the top of the page
+Quote Post
darko
post 11.08.2014, 15:44:30
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


To albo losowo wyciągasz coś z bazy albo jednak według jakiegoś klucza (kryterium). To, co planujesz nie ma nic wspólnego z losowością algorytmów pseudolosowych. Musiałbyś dokładnie opisać, jaki ten współczynnik liczby wystąpień miałby mieć według Ciebie wpływ na pseudolosowość, którą zaplanowałeś?

Ten post edytował darko 11.08.2014, 15:45:09


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
trueblue
post 11.08.2014, 16:17:52
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Zrób sobie tabelę z wagami, trzy kolumny: minimum, maksimum, mnoznik.
Np.:
0 1 1
2 8 10
9 40 100
41 150 1000

  1. SELECT t1.pole,t2.mnoznik*RAND() AS waga FROM tabela1 AS t1 JOIN multi AS t2 ON t1.liczba_wystapien>=t2.minimum AND t1.liczba_wystapien<=t2.maksimum ORDER BY waga DESC LIMIT 0,1


--------------------
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: 13.07.2025 - 03:47