Avatar billede random Nybegynder
22. august 2008 - 11:15 Der er 6 kommentarer og
1 løsning

Hent 2 tilfældige billeder

Jeg har en database med 4 billeder, hvor jeg gerne vil vise 2 forskellige billeder på websiden i tilfældig rækkefølge, hvad gør jeg?? Det samme billede må ikke blive vist på samme tid.

Her henter jeg i db'en:

set rsBanner = Server.CreateObject("ADODB.Recordset")
strSQLBanner = "SELECT * FROM BANNER WHERE BANNER_PLACE = 1 AND BANNER_STATUS = 1 "
rsBanner.open strSQLBanner,strDNS

Her udskriver jeg ét billede:

<div align="center"><a target="_blank" onFocus="this.blur()" href="Redirect.asp?b_id=<%=bannerid%>"><img src="billeder/Banner/<%=bannerpic%>" width="176" height="58" border="0"></a></div>
Avatar billede softspot Forsker
22. august 2008 - 11:20 #1
Hvilken database er der tale om? Med SQL Server kan du f.eks. tilføje en kolonne med tilfældig genereret id og sortere efter den kolonne (jeg tror dette fungerer):

strSQLBanner = "SELECT top 2 * FROM BANNER WHERE BANNER_PLACE = 1 AND BANNER_STATUS = 1 ORDER BY newid()"
Avatar billede softspot Forsker
22. august 2008 - 11:23 #2
eller måske denne version:

strSQLBanner = "SELECT TOP 2 newid() as sortid, * " & _
  "FROM BANNER " & _
  "WHERE BANNER_PLACE = 1 " & _
  "AND BANNER_STATUS = 1 " & _
  "ORDER BY sortid"
Avatar billede random Nybegynder
22. august 2008 - 14:33 #3
Det er en mysql jeg bruger, men er ikke helt sikker på hvordan jeg kan lave en tilfældig "top2" som du siger. Jeg viser dig lige koden som jeg bruger til at udskrive det ene billede, måske du kan se hvordan det kan sættes ind der?


<%

set rsBanner = Server.CreateObject("ADODB.Recordset")
strSQLBanner = "SELECT * FROM BANNER WHERE BANNER_PLACE = 1 AND BANNER_STATUS = 1 "
rsBanner.open strSQLBanner,strDNS


IF NOT rsBanner.EOF THEN
DO UNTIL rsBANNER.EOF

looper = rsBanner("BANNER_RANDOM")

DO UNTIL looper = 0
streng = streng & ", "&rsBanner("BANNER_ID")&""
looper = looper - 1
teller = teller + 1
LOOP

rsBanner.Movenext
LOOP

arrbanner = Split(streng,",")

For t = LBound(arrbanner) to UBound(arrbanner)
   
Next
antal = (t - 1)

Randomize()               
Random = int((antal * Rnd())+1)

bannerid = arrbanner(Random)

set rsBanner = Server.CreateObject("ADODB.Recordset")
strSQLBanner = "SELECT * FROM BANNER WHERE BANNER_ID = " & bannerid
rsBanner.open strSQLBanner,strDNS

bannerid = rsBanner("BANNER_ID")
bannerpic = rsBanner("BANNER_PIC")
bannerCodeTrue = rsBanner("BANNER_CODE_TRUE")


IF bannerCodeTrue <> 1 THEN
%>
    <table width="176" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
      <tr>
        <td bordercolor="#FFFFFF"><div align="center"><a target="_blank" onFocus="this.blur()" href="Redirect.asp?b_id=<%=bannerid%>"><img src="billeder/Banner/<%=bannerpic%>" width="176" height="58" border="0"></a></div></td>
          </tr>
        </table>
<%
ELSE
%>
        <table width="176" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
          <tr>
            <td bordercolor="#FFFFFF" height="60"><div align="center"><a href="http://www.cure4design.dk" target="_blank"><img src="billeder/banner/C4D_banner.gif" border="0"></a></div></td>
          </tr>
        </table>
<%
END IF
%><%
END IF
%>
Avatar billede softspot Forsker
22. august 2008 - 14:42 #4
Jeg er desværre ikke 100 meter mester i MySQL, men jeg synes at have hørt at LIMIT 1,2 svarer til TOP 2 i SQL Server... jeg tror så bare at LIMIT skal placeres i slutningen af SQL-sætningen i stedet... Om newid kan benyttes i MySQL ved jeg ikke, men kig i referencemanualen kan måske afklare dette...
Avatar billede softspot Forsker
22. august 2008 - 14:51 #5
Jeg fandt lige denne konstruktion (http://dev.mysql.com/doc/refman/5.1/en/select.html) til at udtrække 5 tilfældige rækker fra en tabel:

SELECT * FROM foo ORDER BY count*RAND() LIMIT 5

det må være den du har behov for. Omskrevet til din (skulle jeg mene):

strSQLBanner = "SELECT * FROM BANNER WHERE BANNER_PLACE = 1 AND BANNER_STATUS = 1 ORDER BY count*RAND() LIMIT 1,2"

...og så burde du bare kunne gennemløbe alle (2) rækker i resultatet uden at tælle looper ned:

DO UNTIL rsBANNER.EOF
  streng = streng & ", "&rsBanner("BANNER_ID")&""
  rsBanner.Movenext
LOOP

jeg kunne ikke lige få øje på taeller andre steder i din kode, så den tillod jeg mig også at fjerne...
Avatar billede softspot Forsker
28. august 2008 - 23:45 #6
Kom du videre med dette?
Avatar billede random Nybegynder
14. december 2008 - 20:27 #7
fik det aldrig til at fungere.. fik en til at skrive nye koder til mig som fungere.
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