Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marvi

[Resolvido] loop sem repetir conteúdo

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
	Next		
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

guarda "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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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">
<%
do while not myRst.EOF
var_codigo = myRst.fields("codigo")
var_mem = myRst.fields("Mem")
%>
<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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim e funcionou perfeitamente:

 

Memória
<label for="memoria"></label>
<select name="Mem" id="memoria">
<%
vSql = "SELECT DISTINCT MEM FROM TAB_QUADRO_BRASFELS ORDER BY DESC"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
do while not myRst.EOF
var_codigo = myRst.fields("codigo")
var_mem = myRst.fields("Mem")
%>
<option value="<%=var_mem%>"><%=var_mem%></option>
<% myRSt.MoveNext
loop
%>
</select>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aahuahua.... o que vc pode fazer é pegar parte por parte do code e ir fazendo o velho e bom teste de mesa....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.