Ir para conteúdo

Arquivado

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

Maurício Ackermann

Comparando Valores dentro de uma tabela

Recommended Posts

Bom dia pessoal, tudo bom?

 

Estou com um probleminha...

 

Estou montando um banco de dados para os colecionadores das figurinhas da copa. São 640 figurinhas. Criei uma tabela chamada Cromos a qual possui 4 campos: ID, Número, Quantidade, Usuário. Essa tabela deve conter as 640 figurinhas de cada usuário. O problema que estou tendo é de lentidão, pois estou criando uma página que compare as figurinhas de quem tem e quem não tem.

 

Por exemplo, 2 usuários: Marcos e Antonio. Eu estou tentando bolar um jeito que não sobrecarregue o banco de dados de contabilizar quantas figurinhas o antonio tem repetidas que o Marcos não tem. O que eu estou fazendo por enquanto é o seguinte:

<?php
$query1 = "SELECT * FROM Cromos WHERE Usuario = 'Marcos' AND Quantidade = 0";
$stmt1 = sqlsrv_query($conn,$query1);
while($fig1 = sqlsrv_fetch_array($stmt1)){
$numero = $fig1["Numero"];
$query2 = "SELECT * FROM Tenho WHERE Usuario = 'Antonio' AND Numero=$numero";
$stmt2 = sqlsrv_query($conn,$query2);
while($fig2 = sqlsrv_fetch_array($stmt2)){
if($fig2["Quantidade"] > 1){
echo "Antonio tem a figurinha".$numero."<p>";
$total++;
}
}
}
?>

Alguem sabe me dizer se teria algum jeito de montar o banco de dados de forma a não sobrecarregar ou o que mudar na sintaxe para deixar mais rapido?

 

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mudaria a modelagem.

Criaria tres tabelas:

Usuario, Figurinhas e uma relacionando usuario x figurinhas

Deste modo, consegue equilibrar a consulta por indices e se for o caso, mapear o gargalo da consulta.

 

Em uma tabela somente, vamos supor que 10 pessoas tenham as 640 figurinhas, sao 10 * 640, o numero pode nao ser alto, mas imagina as consultas on-demand (line)? Serão 10 pessoas simultaneas fazendo esta consulta, ai começa a ficar lento....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem. Eu tenho uma tabela só de usuários, o campo Usuario dentro da tabela cromos é só para referenciar de que usuário estamos falando e na tabela figurinhas eu tenho só as 640 figurinhas, nada mais. Mas não entendi como a sua dica me ajudaria a deixar menos lento, pois qualquer pesquisa terá que ser feita na tabela cromos (figurinhas x usuario).


Minha dúvida na verdade está no seguinte fato. Na tabela cromos eu tenho as 640 figurinhas pra cada usuário, independente se eles tem a figurinha ou não, tem um campo de quantidade. Eu preciso cruzar as informações entre 2 usuários, um que não tem as figurinhas x,y e z com um que as tenha, mas do jeito que demonstrei acima está MUITO lento. Como melhorar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é a tabela Tenho ?

 

A tabela que controla os cromos deveria ter dois índices na minha opinião

 

PK id_usuario,num_cromo

 

e

 

num_cromo

 

Isto permite responder rápido

 

que cromos um usuario tem ou não tem ?

 

que usuarios tem o cromo "x" ?

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.