Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:05 Der er 27 kommentarer og
1 løsning

Select "tilfældigt"

Heysa
Man kan foreksempel sige "select * from ORDER BY DESC"

Men hvad skal der står i stedet for DESC hvis man vil have den til at tage dem i en tilfældig rækkefølge?
Avatar billede d4s Novice
26. december 2003 - 15:07 #1
MySQL:
SELECT * FROM tabelnavn ORDER BY RAND() LIMIT 0,1
Avatar billede d4s Novice
26. december 2003 - 15:08 #2
hovsa. Du ville jo ikke kun have en post. Så skal der ikke limit med.
SELECT * FROM tabelnavn ORDER BY RAND()
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:11 #3
Sql = "Select * from T_Banner ORDER BY RAND()"

giver denne fejl:
-------
Undefined function 'RAND' in expression.
Avatar billede eagleeye Praktikant
26. december 2003 - 15:11 #4
hvilken database har du?
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:12 #5
access 2000
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:14 #6
Koden er sådan her:
---------------------
<script LANGUAGE="JavaScript">
tekst = new Array();
link = new Array();

<%
Sql = "Select * from T_Banner ORDER BY RAND()"
Set Record =  Rs.Execute(Sql)

taeller=0
Do Until Record.EOF
link = Record("id")
tekst2 = Record("info")

if (len(tekst2) < 25) then
    tekst = tekst2+ "<br><br>"
else
    tekst = tekst2
end if

response.write "tekst[" & taeller & "] = "& chr(34) & tekst & chr(34) & ";" & vbcr
response.write "link[" & taeller & "] = "& chr(34) & link & chr(34) & ";" & vbcr

taeller=taeller+1
  Record.movenext
loop
Record.Close
Set Record = Nothing
Rs.Close
Set Rs = Nothing
%>

num=0;


function roter() {
//udprint af banner
}
Avatar billede eagleeye Praktikant
26. december 2003 - 15:15 #7
Du kan prøve med rnd() eller rnd(autonummer_kolonnen)

SELECT * FROM Tabel ORDER BY Rnd(ID)
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:21 #8
Ja, det virker på en måde. Der er dog et problem hver gang siden hentes så er det den samme "tilfældigerækkefølge"  de printes ud i. Jeg ville gerne at hver gang man åbner siden så er det en anden tilfældig rækkefølge
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:24 #9
er du med på hvad det er jeg vil?
Avatar billede eagleeye Praktikant
26. december 2003 - 15:27 #10
Ja, det er et problem med Access fordi man skal normalt kalde randomize før man kalder rnd() ellers giver den samme rækkefølge ud.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:28 #11
kan det løses?
Avatar billede eagleeye Praktikant
26. december 2003 - 15:37 #12
umiddelbart ved jeg ikke hvordan man kan løse det via SQL for MS skriver selv omkring rnd men ikke problemet:
http://support.microsoft.com/?kbid=208855

Et andet sted står der også rnd(id) virker hvis Visual Basic application klader randomize lige før SQL kaldet men det virker vist ikke med ASP.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:38 #13
Jeg kan også omformulerer mig spg lidt (jeg vil gerne give 60 points for en løsning)

Jeg har den kolonne t_banner med ca. 30 poster i. Kan det kode som er længere oppe laves om så de 30 poster skiftes til at være først? Eksempel med 5 poster:

-----------
1. bruger får denne rækkefølge:
1,2,3,4,5

2. bruger får denne rækkefølge:
2,3,4,5,1

3. bruger får denne rækkefølge:
3,4,5,1,2

4. bruger får denne rækkefølge:
4,5,1,2,3

5. bruger får denne rækkefølge:
5,4,3,2,1

6. bruger får denne rækkefølge:
1,2,3,4,5

osv.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:38 #14
Der skal vel laves en form for "huskefunktion"
Avatar billede eagleeye Praktikant
26. december 2003 - 15:46 #15
Jeg har engang lavet denne til at hendte X antal random poster fra en Access database:


strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("abb.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open strDSN

Rs.Open "SELECT * FROM randomtabel", Conn,1,3
antalRandom = rs.RecordCount
inDB = rs.RecordCount
If inDB >= antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
    Response.write rs("ID") & " ... " & rs("randomtext") & "<br>"

  next
end if
Rs.Close
Avatar billede eagleeye Praktikant
26. december 2003 - 15:54 #16
to sekunder er lige ved at rode med noget jeg fant hvor man laver en funktion i Access som kan bruges i en SQL sætning
http://www.mvps.org/access/queries/qry0011.htm
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 15:55 #17
jeg venter i spænding... :-)
Avatar billede eagleeye Praktikant
26. december 2003 - 16:01 #18
Hvis jeg køre det fra en Query i Access virker det fint...
men hvis jeg flytter SQL sætningen over i en ASP side virker det ikke.
hvis jeg gemmer Query'en og kalder den fra en ASP sider virker det heller ikke...
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 16:02 #19
sikke noget møg :-)

Hvad siger du til det med "Huskefunktionen"?
Avatar billede eagleeye Praktikant
26. december 2003 - 16:35 #20
så kom løsningen ;)
...

Prøv at disse to linjer kode før din SQL sætning:

Randomize
R=clng(100000*rnd)


og tilføj denne ORDER BY i på din SQL sætning istedet for ORDER BY rnd(id):
ORDER BY rnd(-(id)* " & R & ")"
Avatar billede eagleeye Praktikant
26. december 2003 - 16:38 #21
så du laver din sql sætnign sådan her:

Randomize
R=clng(100000*rnd)
Sql = "Select * from T_Banner ORDER BY rnd(-(id)* " & R & ")"
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 16:45 #22
Det giver denne fejl:
-----------
The application is using arguments that are of the wrong type, are out of acceptable range, or are in conflict with one another.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 16:46 #23
Min fejl - det virker MAX!!
Avatar billede eagleeye Praktikant
26. december 2003 - 16:47 #24
Ok ;) forstod heller ikke helt den fejl.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 16:47 #25
Smider du ikke et svar?

Kan du forklare i ord, hvad det er der sker, så vi også lære lidt af det? :-)
Avatar billede eagleeye Praktikant
26. december 2003 - 16:51 #26
Ideen er det samme som rnd(id)

rnd(id) giver en tilfældig række følge af posterne, men altid den samme rækkfølge. Så var ideen at gange et tilfældigt tal på ID sådan ID ikke var det samme men det havde ingen betydning på rækkefølgen. Så fant jeg et spørgsmål experts-exchange dette:
http://www.experts-exchange.com/Web/Web_Languages/ASP/Q_20787709.html
Hvor der en som skriver der skal et - tegn foran id*tal så tager den en ny række følge hver gang.

Hvorfor det viker kan jeg ikke helt svare dig 100% men det er noget med - tegner. Man skal gange med et tilfældigt tal for rnd(-id) viker ikke.
Håber det hjalp lidt.
Avatar billede kimlarsen1978 Nybegynder
26. december 2003 - 17:01 #27
Okay takker - godt nytår
Avatar billede hemberg Forsker
17. februar 2007 - 11:25 #28
Ville sku' gerne have givet eagleeye point for dette også. Det "fungker" bare.....

Tak for det...
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

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