Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Caros amigos,
estou usando este código para randomizar resultados. O código mostra 8 banners mas as vezes repete um deles. Fica estranho 2 banners iguais na mesma tela.
Existe alguma maneira para não repetir os banners uma vez que é randomico?
dim rsb2, sqlb2, count_meio, pagesize_meio
count_meio = 0
pagesize_meio = 8
Set rsb2 = Server.CreateObject("ADODB.Recordset")
sqlb2 = "SELECT banners_vezes.id_banner, banners.id,anunciante_id,vezes_apareceu,arquivo FROM banners_vezes,banners WHERE tipo = 0 and banners_vezes.id_banner = banners.id ORDER BY RAND()"
rsb2.Open sqlb2, conn_p, 3
if rsb2.eof and rsb2.bof then
response.write ""
else
do while not rsb2.eof and count_meio < pagesize_meio
count_meio = count_meio + 1
conn_p.execute("UPDATE banners SET vezes_apareceu = vezes_apareceu + 1 WHERE id = "& rsb2("id") &"")
%>
<li class="cbp-item cbp-l-grid-masonry-height0">
<div class="cbp-caption-defaultWrap"><img src="<%= strEndereco_http %>arquivos/anunciantes/<%= rsb2("arquivo") %>" alt="" /></div>
</li>set rsb2 = nothing
Obrigado pela atenção de todos
Cada banner é cadastrado nesta tabela de acordo com o plano, se ele plano 1 ele cadastrado 1 veze nesta tabela, plano 2, 5 vezes é para aumentar a chance de aparecer mais vezes do que o plano 1
Tente
sqlb2 = "SELECT distinct banners_vezes.id_banner, banners.id,anunciante_id,vezes_apareceu,arquivo FROM banners_vezes,banners WHERE tipo = 0 and banners_vezes.id_banner = banners.id ORDER BY RAND()"
Caro Motta
eu jpa tinha usado "distinct" mas não deu certo.
Alguma outra solução?
podes sempre por o resultado do primeiro banner numa session ou variavel e quando ele vai colocar o segundo banner verifica se é igual.
Pode nao ser o ideal mas desenrasca. :s
Caro razs
Fis isso tbm, mas realmente pula o que já foi mas como são 8 banners continua tendo a possibilidade de aparecer o primeiro banner ou terceiro, assim por diante.
Olá Inside blza!
Bem vamos dando as ideias rsrsrs, uma ora alguma te ajuda.
você disse que são 8 banners que irão se randomizar mas não repetir.... E depois que rodar os 8 banner o que acontece? volta do início novamente?
Irá te dar um trabalhinho a mais, mas poderá criar um campo, por exemplo: "Exibiu" e ao ser exibido esse banner ele será setado na base de dados, ou de outra forma que você desejar armazenar essa informação. (Pois poderá querer limpar esses campos tb, para novas exibições, tem que pensar nisso tb).
Quando o sistema for fazer as novas exibições dos banners irá pular esse que já está setado e não será mais exibido.
Sei lá, foi como eu disse, vamos dar ideias até que uma possa te ajudar.
vlw
Caro wilnet
talvez possa ser em Session mesmo explitar talvez, o que acha?
talvez dando um numero a cada um, tipo banner1, banner2 e guardando o numero numa var e sempre que for colocar um banner novo faz um split a var e verifica se o numero do banner existe na var...
ou ate mesmo
sem split, guardas os nomes dos banners que vais colocando numa var separados por virgula e sempre que ele for colocar um novo banner fazes instr com o nome do novo banner para ver se ele existe nessa variavel.
var = InStr(banners_ja_colocados, novo_banner)
aconselho-te a fazer um trim aos nomes dos banners antes de os colocares na variavel e ao novo_banner pelo sim pelo nao.
Como eu faço para acumular valores em uma variável? Fiz desta forma mas não deu certo:
banners_mostrados = "" & rsb2("id") & ","
<%= banners_mostrados %>
olha este exemplo:
RANDOM com registros de um banco de dados sem repetição.
<%
' Gravamos o Recordset em um Array Bidimensional
Set strRS = Server.CreateObject("ADODB.RecordSet")
strRS.Open "SELECT * FROM membros ", strConexao, 3, 3
arySub = strRS.getRows()
' Fechamos a conexão pois não usaremos mais
strRS.Close
Set strRS = Nothing
strConexao.Close
Set strConexao = Nothing
Dim TotalReg, TotalNum, vran, x, encontrou, arrGerados(0)
Dim Numreg, verGerado, var_arrGerados, xLoop
Function GeraRegistros(TotalNum)
TotalReg=Cint(uBound(arySub,2)) ' Encontramos o Maior Array Gerado
vran = 1
For x = 0 To TotalNum-1 ' LOOP de 1 p/ Total solicitado
encontrou = 1
Randomize() ' Geramos o primeiro Random
NumReg = Cint((rnd*TotalReg))
verGerado = Split(var_arrGerados,",") ' Verifica se nº gerado
For xLoop = LBound(verGerado) To UBound(verGerado)
IF Trim(verGerado(xLoop)) = Trim(NumReg) Then
'Este "response" comentado abaixo, indica qual número se repetiram
'E não armazena no Array único, fazendo gerando um novo Random
'response.write "<b>[ "& verGerado(xLoop) &","& NumReg &" ]</b><br> "
x = x - 1
encontrou = 2
Exit For
End IF
Next
IF encontrou = 1 Then ' NÃO ENCONTROU, gera o próximo número
IF vran = 1 Then ' primeiro (Verificar este trecho)
arrGerados(0) = NumReg
vran = 2
Else
arrGerados(0) = arrGerados(0) &","& NumReg
End IF
var_arrGerados = Join(arrGerados)
End IF
Next
GeraRegistros = var_arrGerados
End Function
' Array gerado, podemos iniciar a formatação de perguntas
number = GeraRegistros(3)
verNum = Split(number, ",")
For x = LBound(verNum) to UBound(verNum)
response.write arySub(0,verNum(x)) &"."
response.write arySub(1,verNum(x)) &"<br>"
Next
%>
Caro xanburzum
Seu código também repetiu.
banners_mostrados = banners_mostrados &rsb2("id") & ","
Caros
Eu tentei isso aqui mas noa rolou, continua repetindo:
dim rsb2_id, rsb2, sqlb2, count_meio, pagesize_meio
'Capta IDs para mostrar
set rsb2_id = conn_p.execute("SELECT banners_vezes.id_banner, banners.id,anunciante_id,vezes_apareceu,arquivo FROM banners_vezes,banners WHERE tipo = 0 and banners_vezes.id_banner = banners.id ORDER By RAND() LIMIT 0,8")
do while not rsb2_id.eof
'Concatenando IDS
'Resultado semelhante a isso: banners.id <> 25 and banners.id <> 8 and banners.id <> 24 and banners.id <> 20 and banners.id <> 31 and banners.id <> 31 and banners.id <> 35 and banners.id <> 31
id_banner2 = "banners.id <> " & rsb2_id("id") & ""
id_prepara2 = "" & id_banner2 & " and "
id_concatenado2 = id_concatenado2 & "" & id_prepara2 & ""
rsb2_id.movenext
loop
id_final2 = left(id_concatenado2,len(id_concatenado2)-4)
response.write "<!-- " & id_final2 & " -->"
count_meio = 0
pagesize_meio = 8
Set rsb2 = Server.CreateObject("ADODB.Recordset")
sqlb2 = "SELECT banners_vezes.id_banner, banners.id,anunciante_id,vezes_apareceu,arquivo FROM banners_vezes,banners WHERE " & id_final2 & " and tipo = 0 and banners_vezes.id_banner = banners.id ORDER BY RAND()"
rsb2.Open sqlb2, conn_p, 3
if rsb2.eof and rsb2.bof then
response.write ""
else
do while not rsb2.eof and count_meio < pagesize_meio
count_meio = count_meio + 1
%>
<div class="cbp-caption-defaultWrap"><img src="<%= strEndereco_http %>arquivos/anunciantes/<%= rsb2("arquivo") %>" alt="" /></div>
<%
rsb2.movenext
loop
end if
set rsb2 = nothing
Era para rodar com o "SELECT DISTINCT" conforme sugestão do colega Motta.
Se você tiver mais registros na base do que vai mostrar, tente adicionar também no final da instrução o "LIMIT".
Att.
vc mudou a linha: number = GeraRegistros(3)
O número 3 indica quantos registros vc deseja, no caso, serão gerados 3 registros aleatórios diferentes.
O que é a tabela banners_vezes !?