Autor | Zpráva | ||
---|---|---|---|
Ondra Sojka Profil |
#1 · Zasláno: 11. 1. 2014, 08:46:50
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 |
#3 · Zasláno: 11. 1. 2014, 18:32:46
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 |
#4 · Zasláno: 11. 1. 2014, 21:29:50
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 |
#5 · Zasláno: 12. 1. 2014, 07:56:51
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. |
||
Časová prodleva: 10 let
|
0