09. august 2006 - 11:33Der er
10 kommentarer og 1 løsning
Forudsat sandsynlighed for tilfældig udtræk af database
Jeg har en database med omkring 200 recordset. Jeg skal have lavet en side, hvor den tilfældigt trækker en af de 200 ud.
Jeg skal dog have modificeret det lidt, for sandsynligheden for at netop den kommer ud skal være forudsat. For et felt kan der måske være 1 ud af 200 sandsynlighed for at komme (standard), et andet felt 1 ud af 100, et tredje felt med 1 ud af 500.
Jeg forstiller mig noget med at tilføje en ekstra kolonne i min tabel som skal indeholde nogle tal, og afhængigt af de tal er der en kode der regner ud hvor ofte det skal opstå.
Er det noget der kan lade sig gøre? Er det nemmere at gøre uden database? Ja, jeg har mange spørgsmål...
Det nemmeste er at have rækkerne til at stå flere gange via et join:
[Tabel1] id, tekst 1, denne skal stå 2 gange 2, denne skal stå 3 gange 3, denne skal stå 1 gang
[joinTabel] fremmedID 1 1 2 2 2 3
Så bruges denne select tli at få resultatet: "select t.Tabel1 from Tabel1 t inner join joinTabel jt on jt.fremmedID=t.id" 1, denne skal stå 2 gange 1, denne skal stå 2 gange 2, denne skal stå 3 gange 2, denne skal stå 3 gange 2, denne skal stå 3 gange 3, denne skal stå 1 gang
Så er det bare at lave en almindelig random på den.
Hvis jeg har forstået det rigtigt (Lidt noob er man vel altid ;) ), bliver det så ikke lidt besværligt med 200 eller flere recordset og hvis der er nogle der skal vises ultra sjældent?
Et eller andet sted jo, men jeg kan ikke se andre muligheder. Lad os bare tage et simpelt eks med 2 rækker: 1, "denne skal vises 9 gange" 2, "denne skal vises 1 gang"
At lave en random som gennere 1 ni gange oftere end 2 er ikke nogen nem opgave (men kan dog lade sig gøre). At lave en random til +100 ræker, som alle har forskellig sansynlighed er noget nær umuligt. Prøv bare at smide en ekstra række på:
1, "denne skal vises 7 gange" 2, "denne skal vises 2 gang" 3, "denne skal vises 1 gang"
Jeg har ingen ide om hvordan den random skal kunne laves, men ved at udvide rækken til 10 i alt (7*1, 2*2 1*3), sker det helt automatisk.
Du skal altså kun koncentrere dig om at styre [joinTabel] tabellen, sa sansynlighederne passer.
lav et view SELECT udplukstabel.id, udplukstabel.tekst, udplukstabel.Pcounter FROM Ptabel INNER JOIN udplukstabel ON Ptabel.Pcounter = udplukstabel.Pcounter;
resulatet
id tekst Pcounter 1 den skal 1 gang 1 2 den skal 2 gange 2 2 den skal 2 gange 2 3 den skal 6 gange 6 3 den skal 6 gange 6 3 den skal 6 gange 6 3 den skal 6 gange 6 3 den skal 6 gange 6 3 den skal 6 gange 6
Hvis man så også tilføjer en række med et tilfældigt stort tal, som man man sortere på - så de ikke ligger i en ordnet liste, så skulle være mere tilfældigt.
Hvis du tilføjer en replkerings-id til Ptabel og sorterer efter idet, så får du en tilfældigt blandet liste at plukke fra ;-)
se her
id tekst Pcounter randommer 2 den skal 2 gange 2 {0A82B923-B271-410C-A3E2-CFF280ADE9BB} 3 den skal 6 gange 6 {3B91406E-2874-4E37-8D58-0CFBA2487AEB} 3 den skal 6 gange 6 {3E55BD70-D9D7-4D66-8DBD-E87617332270} 3 den skal 6 gange 6 {46770DED-22BE-4592-AF04-92F1D33B8B09} 2 den skal 2 gange 2 {579F2C44-F4DC-4002-8E68-6B4C8E881F1E} 1 den skal 1 gang 1 {CC1624A2-5B83-42DE-979B-767BA0336A1D} 3 den skal 6 gange 6 {D50287A4-8E98-48E2-9769-E09EA733159A} 3 den skal 6 gange 6 {E0F89D4C-28AF-4A88-B700-CF8FF8E6D486} 3 den skal 6 gange 6 {FDF42EB5-23F9-44A7-9DB5-8880CD2A9DF2}
Hov ja, det må du undskylde fennec. Så må jeg lige skylde dig lidt :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.