Autor Zpráva
yFang
Profil
Potřeboval bych udělat dotaz, který by vybral náhodný řádek s ohledem na šanci, která bude uložená v jednom ze sloupců toho řádku.

Příklad (počet položek se bude měnit):
+------+--------+
| name | chance |
+------+--------+
| A    |      8 |
| B    |     15 |
| C    |      7 |
+------+--------+
Kdybych ten výběr provedl 30x, tak bych chtěl aby tam bylo A zhruba 8x, B zhruba 15x a C zhruba 7x. Nenapadá mě, jak to napsat, případně pod čím to hledat.
Kajman
Profil
Možná si předpočítat do nějakého indexovaného sloupce intervaly 0-1 podle té šance
+------+--------+-------------+
| name | chance |    randto   |
+------+--------+-------------+
| A    |      8 | 0.266666666 |
| B    |     15 | 0.766666666 |
| C    |      7 | 1.000000000 |
+------+--------+-------------+

a pak udělat nenáročný dotaz (verze s rand ve where nebyla dobrá)

SELECT *
FROM   tbl
       CROSS JOIN (SELECT Rand() r
                   FROM   DUAL) r
WHERE  randto < r.r
ORDER  BY randto DESC
LIMIT  1 
yFang
Profil
Ok, vyzkouším to, díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: