Avatar billede apo Praktikant
04. april 2006 - 19:12 Der er 6 kommentarer og
1 løsning

Random udtræk fra database

Hej :-)

Dette overstiger mine evner inden for ASP. Derfor vælger jeg at spørge her.

Jeg har tænkt mig, at lave en database indeholdende en række tips, der skal trækkes tilfældigt ud og vises på en ASP-side.

MEN... Jeg kunne godt tænke mig det sådan, at den enkelte bruger ikke ser det samme tip, den samme dag/ved det samme besøg - før vedkommende har fået vist alle tipsene i databasen.

Nogen idéer til hvordan man laver en sådan funktion, og uden at det kræver de store resscourcer af serveren?
Avatar billede and_ Nybegynder
04. april 2006 - 19:20 #1
i din user-tabel:
id, navn, brugernavn, kode, har_set_hint
1,'Anders','Anders','and','1,3,2,4,5,6,9,56,787'

Når en bruger logger ind, henter du feltet: har_set_hint
fra basen. fx i en variabel "vis_ikke":
vis_ikke = rs("har_set_hint")

Du så fra din hint-base med følgende sql:
select * from hints where not id in (' & vis_ikke & ')

Når du så har vist det næste hint der kommer kender du også id på denne...
denne tilføjer du til feltet har_set_hint:
rs("har_set_hint") = rs("har_set_hint") & "," & id_paa_hint
Avatar billede apo Praktikant
04. april 2006 - 19:32 #2
Nu er det sådan, at de besøgende ikke har brugerlogin. Når jeg skriver 'bruger' er det nok misvisende, og jeg skulle nok hellere have skrevet 'besøgende'.

Jeg omformulerer lige min beskrivelse:

Det jeg ønsker er en funktion, som laver et vilkårligt udtræk fra en database; men som samtidig gør, at den besøgende ikke ser det samme tip mere end én gang før listen er løbet igennem eller før næste besøg.

Der er ikke tale om brugere, der har eget login eller på anden måde kan identificeres. Der skal med andre ord ikke gemmes data i databasen - Men gerne i en cookie, der kun er aktiv imens den besøgende er på mit site.

Hvordan laver man det?
Avatar billede eagleeye Praktikant
05. april 2006 - 00:37 #3
Du kan gemme det i session variablen eller som du skrive cookie. Der er dog stadig ingen garenti en bruger får vist samme tip flere gange, da en bruger jo selv styre om han vil havde gemt cookies og sessions.

men i grund træk vil koden være:

<%
sWhere = ""
if Session("vistliste") <> "" then sWhere = " WHERE id not in (" & mid(Session("vistliste"),2) & ") "
sql = "select * from tipstabel " & sWhere & " order by 'random'" 'sqlen vil være database afhængig.
Set rs = Conn.Execute(sql)
'Udskriv tip
Response.Write rs("kolonner")
'Gem ID'et på tipet.
Session("vistliste") = Session("vistliste") & "," & rs("id")
rs.Close
%>



Session er aktiv så længe brugeren er på siden, så kommer han tilbage senere på dagen kan han se noget han har set før på dagen.. Du kan også gemem det i cookies, man henter en cookie med Request.Cookies("navnet") og gemmer den med Response.Cookies("navnet")
Avatar billede eagleeye Praktikant
05. april 2006 - 00:38 #4
Bruger du cookies bør du nok også gemme en dato og tjekke om det var i går brugeren sidt var på siden og så null stille cookien.
Avatar billede apo Praktikant
08. april 2006 - 23:31 #5
eagleeye > Tak for dit eksempel. Jeg er imidlertid gået over til at bruge en almindelig random-funktion - men kan muligvis bruge dit eksempel i en anden sammenhængen.

Hvis du lægger et svar, er der points til dig :-)
Avatar billede eagleeye Praktikant
08. april 2006 - 23:45 #6
Ok så kommer her et svar :)
Avatar billede apo Praktikant
08. april 2006 - 23:47 #7
Så kommer der nogle points :-)

// Lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester