Autor Zpráva
Ondra Sojka
Profil
Dobrý den, aktuálně volím záznamy z DB absolutně náhodně, pomocí ORDER BY Rand(). Potřebuji ovšem, aby nějaké měly vyšší prioritu, a ta priorita by se dala měnit. A aby každý uživatel měl jinak vysokou prioritu každého záznamu. Tzn.. uživatel X bude mít pravděpodobnost že se zvolí záznam 32 2x vyšší, ale uživatel Y ji bude mít normální.

Pište své návrhy.
Nebojte se zeptat, jestli jsem něco vysvětlil špatně, rád odpovím.
Alphard
Profil
Klasické řešení je nějakým výpočtem modifikovat výsledek funkce rand() a podle něho řadit. V nejjednodušším případě násobit, ale viděl jsem i různé použití log(1 - rand())*weight apod.
Ondra Sojka
Profil
Má vize je:
tabulka normálních otázek, pro neregistrované (bez této optimalizace), a další tabulka špatně, kam budu ukládat vždycky jméno, lekci (téma, chcete-li), otázku a počet špatných odpovědí na ni. Je opravdu potřeba selectovat všechny špatné odpovědi na aktuální téma a pro aktuál. uživatele abych získal váhu?
Kajman
Profil
Ondra Sojka:
Je opravdu potřeba selectovat všechny špatné odpovědi na aktuální téma a pro aktuál. uživatele abych získal váhu?

Pokud na té kombinaci sloupců bude index, mělo by to být svižné (tedy nebude to pomalejší než složité neoptimalizovatelné řazení podle výsledku rand()). Když by výpočet váhy jednou podle explainu vycházel přilíš náročný, můžete si to předpočítávat do pomocné tabulky.

A do váhy zvažte přidání i počet správných odpovědí. Pokud bude mít někdo např. otázku s nejvíce třeba 10 chybami, ale bude tam už mít od té doby třeba 200 správných, tak mu stále bude vyskakovat častěji, než otázka, kde má 5 chyb z 5 pokusů.
Ondra Sojka
Profil
Děkuji, přidám index na tu základní tabulku.

Raději bych použil procenta správnosti, a pak je přepočítal na váhu.

Pochopil-li jsem správně, budu je muset selectovat všechny.

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: