Ir para conteúdo

POWERED BY:

Arquivado

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

[ GuTo ]

Sorteio de registros. interação com duas tabelas ¿avançado?

Recommended Posts

Olá pessoal,Problema é: preciso fazer o sorteio de 10 produtos cadastrados, só que cada 1 deve ser de uma loja diferente, ou seja, não pode repetir a loja.Teria duas tabelas, ex:Tabela: produtosCampos: loja_id, produto_id, produto_nome, produto_foto, produto_urlTabela: lojasCampos: loja_id, loja_nome, loja_urlNão sei como poderia fazer este sorteio de maneira correta (sem bugs) e otimizada.Desde já agradeço pela força,Amplexos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim?Tipo:Resultado:Loja 1 - Computador P4 - ID: 21Loja 2 - Computador P4 - ID: 26è isso? Só pode aparecer o resultado de uma Loja caso as duas tem o mesmo produto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim...

 

Cada loja, pode cadastrar quantos produtos ela quiser no banco de dados.

Só que na página principal, preciso sortear N produtos quaisqueres, só não posso é exibir mais de 1 produto da mesma loja, sacou?

 

Então, os dados que apenas necessitamos para isso são: loja_id e produto_id.

 

Agora um exemplo de um recordset relacionado com as duas atbelas:

loja_id - loja_nome - produto_id

1 - loja1 - 1

1 - loja1 - 2

2 - loja2 - 5

9 - loja9 - 3

3 - loja3 - 4

2 - loja2 - 6

9 - loja9 - 7

 

Não podemos apenar sortear registros com ID's de produtos diferentes, pois os produtos podem pertencer a mesma loja (vide os negritos)

Então, preciso sortear no caso, 10registros de produtos de lojas diferentes.

Acho que agora até o meu raciocínio ficou melhor...

 

Mas vejam...

Quero saber fazer este sorteio de maneira que não haja perda de performance, que seja um código otimizado.

 

Tenho alguns exemplos de sorteios, mas como nunca precisei usar sorteios, nunca mechi.

Daí gostaria de uma ajuda de vocês.

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou tentar fazer uma consulta aqui pra vocemas de forma simples voce pode usar dois recordsets mas logico que esta ultima solução não é a melhor mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não... um recordset, que faça um inner join para relacionar os dados, já fará tudo por si só, devolvendo loja_id, produto_id ;)

 

Daí pensei em fazer assim na SQL.

SELECT a.loja_id, a.loja_nome, a.loja_url, b.produto_id, b.produto_nome, b.produto_foto, b.produto_url FROM lojas AS a INNER JOIN produtos AS b ON a.loja_id = b.loja_id
Agora...

Preciso filtrar estes dados, pegar apenas um número X específico de registros, sendo de lojas diferentes/distintas, só que sem ordem.. preciso sortea-los.

 

Alguém sabe?

 

Só como sortear os registros então?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, como sempre.. preciso deixar a preguiça de lado...

 

Vou mostrar meu código! ;)

 

AVISO: Usei GETROWS para fazer o código direitinho. Gostaria de saber se alguém não tem alguma alternativa BOA mas trabalhando sem getrows, só recordset e loop... algo assim.. mas acho q nao daria pra fazer um sorteio bom... enfim, se alguém souber, tiver uma luz vendo meu código, por favor, poste aí ;)

 

Vão notar q a entidade lojas agora tem o nome de sites e seus atributos foram renomeados tbm ;)

 

<!--#include file="inc_configuracoes.asp"--><!--#include file="inc_conexao.asp"--><table>  <thead>  <tr>	<th>site_id</th><th>site_nome</th><th>site_url</th>	<th>produto_id</th><th>produto_nome</th><th>produto_url</th><th>produto_foto</th>  </tr>  </thead>  <tbody><%subConexaoAbre()dim x, rs, arr, num, min, max, sites, reg, totalDeRegistrossites=""reg=0set rs = server.CreateObject("ADODB.Recordset")rs.open("SELECT a.site_id, a.site_nome, a.site_url, b.produto_id, b.produto_nome, b.produto_url, b.produto_foto FROM sites AS a INNER JOIN produtos AS b ON a.site_id=b.site_id ORDER BY produto_id ASC"),objCon,1,1if NOT rs.eof then arr=rs.getrowsrs.close : set rs=nothingsubConexaoFecha()if isArray(arr) then	min=lbound(arr,2)	max=ubound(arr,2)	totalDeRegistros=max+1	randomize	while reg < 12'o numero aki tem de ser <= ao numero total de sites;) ... refere-se a qtos quero sortear		num=Cint(rnd * max)		if InStr(1,sites,","&arr(0,num),1)<1 then			Response.Write(vbCrLf & "  <tr>")				reg=reg+1				sites=sites & "," & arr(0,num)				Response.Write(vbCrLf & vbTab & "<td>" & arr(0,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(1,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(2,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(3,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(4,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(5,num) & "</td>")				Response.Write(vbCrLf & vbTab & "<td>" & arr(6,num) & "</td>")			Response.Write(vbCrLf & "  </tr>")		end if	wendend if%>  </tbody></table>

Hoje, dia 05/08/2006 reparei que este código tem um bug, onde o produto poderia ser repetido.

A variável sites deve passar a ser um array.

E no lugar do inStr seria colocado um loop verificando se já existe o valor no array.

Assim corrigiriamos o bug.

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.