Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Tentei várias maneiras, mas não consegui fazer um loop que não repita o mesmo conteúdo:
Tenho no banco:
nome | casa
joão | 4
maria | 4
josé | 5
ricardo | 5
luis | 6
Quando eu faço o loop, ele fica:
joão | 4
maria | 4
josé | 5
ricardo | 5
luis | 6
Só que não quero quem é de números iguais se repitam, ficando somente assim:
joão | 4
josé | 5
luis | 6
Não importando quem seja, mas que o número não se repita.
Assim fiz esse código, mas não conseguir mudar:
SQL:
SELECT eventos, fotos, referencia, eventos.código as cod from eventos inner join fotos on eventos.código=fotos.referencia
ASP:
<%
conta = 0
While Not rsfotos.EOF
sArtista = rsfotos("eventos")
conta = conta +1
If conta = 1 Then
%>
<td width="33%"><%=sArtista%> </td>
<%
end if
rsfotos.MoveNext
If Not rsfotos.EOF Then
If rsfotos("eventos") <> sArtista Then
conta = 0
End If
End If
Wend
%>
Como resolver?
Desde já, agradeço
OBS: Eu percebi que esse ASP só não repete o número se ele estiver na ordem.
Se tiver no banco assim:
4
4
5
Ele não repete o 4 duas vezes. Mas se tiver assim:
4
5
4
Ele repete o 4 duas vezez, pos ele compara o último loop e ver que teve um 4 e um 5 e não um 4 e outro um 4, entedem?
Pode ser que o Group By ou distinct
Mas no seu caso é um pouco complexo, pq na casa 4 tem duas pessoas diferente, e acho que o group by ou distinct nao iria funcionar pois a coluna nome tem conteudo diferente com o mesmo numero na coluna casa.
Se fizer um distinct pelo numero, o resultado será todos os nomes que possuem o mesmo numero.
O correto é fazer na consulta mas caso precise fazer no codigo segue baixo uma maneira de fazer, fiz com array mas é so utilizar com RecordSet
<%
Dim arrCliente(5,1)
arrCliente(0,0) = "joao"
arrCliente(0,1) = 1
arrCliente(1,0) = "maria"
arrCliente(1,1) = 2
arrCliente(2,0) = "farias"
arrCliente(2,1) = 2
arrCliente(3,0) = "godofredo"
arrCliente(3,1) = 1
arrCliente(4,0) = "marina"
arrCliente(4,1) = 1
Dim existe
Dim arrItems()
Redim Preserve arrItems(n)
existe = False
'Verifica se o fulano já existe
For i = 0 To Ubound(arrCliente,1)
For Each item In arrItems
If arrCliente(i,1) = item Then
existe = True
Exit For
End If
Next
'Se não existe imprimi na tela e adiciona no array de items existentes
If Not existe Then
Response.Write arrCliente(i,0) & " | " & arrCliente(i,1) & "<br />"
Redim Preserve arrItems(Ubound(arrItems))
arrItems(Ubound(arrItems)) = arrCliente(i,1)
End If
Nextguarda "numero_casa" em "numero_casa1" numa variavel no fim do loop.
Se (numero casa1 = numero casa) //bota no meio do loop
não grava no bd
senão
grava.
Achei um solição: se o campo código estiver ordenado fica mais fácil, pois você armazena ele em uma variavel auxiliar e na proxima passagem verifica se é igual, se for igual não faz nada e passa para o proximo registro
Se cado o erro continue, eu volto!
Obrigado!
Trofeu pá de ouro pra mim! :clap: .
To com o mesmo problema fiz um loop no banco para listar dentro de um combobox, mas.... em alguns campos tem dados repetidos placa de video:
geforce9400
geforce9400
geforce9400
Fernando obrigado pela luz no fim do tunel estou tentando montar um pagina mais dinamica onde puxaria os itens do banco de dados até entao funciona tirando o problema da repetição pelo oke li em um select usando distinct elimina as duplicatas perfeito mais em um do while como ficaria??
Segue meu codigo:
Memória
<label for="memoria"></label>
<select name="Mem" id="memoria"><option value="<%=var_mem%>"><%=var_mem%></option>
<% myRSt.MoveNext
loop
%></select>
Pensei bem aqui eu conseguiria fazer um "SELECT DISTINCT MEM TAB_ITENS_CYDER ORDER BY MEM DESC" e armazenar esse resultado em uma variavel ae sim fazer o do while pra varrer essa variavel?Fiz assim e funcionou perfeitamente:
Memória
<label for="memoria"></label>
<select name="Mem" id="memoria"><option value="<%=var_mem%>"><%=var_mem%></option>
<% myRSt.MoveNext
loop
%>
</select>
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
%>
pow xan tenho certeza que vc manja mt de programação mas sou mt leigo pra aprender assim so olhando e fazendo e se eu for perguntar tds as duvidas esse topico vai ficar com uns 50 post srsrrs.
aahuahua.... o que vc pode fazer é pegar parte por parte do code e ir fazendo o velho e bom teste de mesa....
aahuahua.... o que você pode fazer é pegar parte por parte do code e ir fazendo o velho e bom teste de mesa....
Putz nem fala tenho prova hj da facul programação 1 é teste de mesa a prova inteira
Testou com group by ou Distinct ?