Jump to content

comparar resultados de tabelas


serrano

Recommended Posts

Ola boa noite.

Tou praqui tentando inventar..

o que qprocuro fazer é o seguinte:

tenho duas tabelas, Tabela1 e tabela2, estructuras:

tabela1

  • cam1_tab1
  • camp2_tab1
  • camp3_tab1

tabela2

  • cam1_tab2
  • camp2_tab2
  • camp3_tab2

quero fazer um select na tabela 2, verificar o valor de cada campo e ver se corresponde algum campo da tabela1, caso exista, retorna a quantidad de valores iguais, caso não exista retorna zero.

exemplo

tabela 1

camp1_tab1 = a

camp2_tab1 = b

camp3_tab1 = c

tabela 2

camp1_tab2 = a

camp2_tab2 = b

camp3_tab2 = c

Neste caso retornava o valor "3" porque os tres valores existem

outro exemplo

camp1_tab1 = z

camp2_tab1 = h

camp3_tab1 = t

tabela 2

camp1_tab2 = a

camp2_tab2 = x

camp3_tab2 = h

Neste caso retornava o valor "1" porque só o 'h' é que existe.

Não sei se me fiz entender.

Pouco percebo de programação e nem sei como começar a fazer isto, já pesquisei mas não encontro nada ao meu alcance que se adapte.

Obrigado

Serrano

Link to comment
Share on other sites

Boas, se puderes dar um exemplo mais prático (human readable), seria mais fácil ajudar-te. Pelo que percebi queres comparar as tabelas e ver se existem os mesmos valores numa e noutra, mas não encontro nenhuma situação em que isso seja necessário.

Link to comment
Share on other sites

O SQL a fazer sera bastante simples:

SELECT COUNT(*)

FROM tabela1

LEFT JOIN tabela2 ON (tabela1.campo_a_comparar=tabela2.campo_a_comparar);

Aqui vai dar-te o resultado de campos identicos na tabela1 e tabela2, que tem o mesmo valor no campo campo_a_comparar

Penso que será isto que queres

Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com

Link to comment
Share on other sites

Tenho o seguinte cod:

<?PHP
$teste = "SELECT COUNT(*) AS total FROM tabela1 WHERE camptab1 IN (SELECT camptab2 FROM tabela2)";


$result = mysql_query($teste) or die(mysql_error());

while ($linha=mysql_fetch_array($result)) {

echo $result[0];
}
?>

só retorna 1 resultado, ou seja, só compara dois campos, 1 campo da tabela1 com um campo da tabela2.

se tiver igual mostra 1 caso esteja diferente mostra 0.

Era isso que eu queria, mas comparar varios campos aos mesmo tempo entre duas tabelas.

Link to comment
Share on other sites

Boas,

Acho que há soluções mais viáveis para o que queres. Se queres fazer gestão de stocks, crias uma tabela para os produtos e outra para o stock. Deste modo, para saberes os stocks de cada produto, só tens de fazer um INNER JOIN em sql para obter as quantidades de cada produto em stock.

Link to comment
Share on other sites

Boas,

Penso que neste caso e se tiveres mySql com o sistema de bd que permita as subqueries poderás usar uma sub Query Ex:

SELECT *, (SELECT COUNT(*) FROM Tabela2 Where Campo1 = t.Campo1) as ContaCampos FROM Tabela1 t

Com os melhores cumprimentos,

INNER / OUTER / LEFT / RIGHT JOIN funciona melhor neste caso.

Link to comment
Share on other sites

não tou a conseguir não, já é areia demais pra mim.

Eu tenho um exemplo onde também queria usar ja há algum tempo atras, queria fazer um pequeno sistema onde iria gerir o meu euromilhões, acabei por desistir pelo mesmo problema.

Exemplifico com o euromilhoes:

tenho a tabela onde coloco a minha aposta, só os 5 numeros, vamos esquecer as estrelas..

» tabela_aposta

    * idaposta

    * campo1_ap

    * campo2_ap

    * campo3_ap

    * campo4_ap

    * campo5_ap

» tabela_chave_semanal

    * idchave

    * campo1_ch

    * campo2_ch

    * campo3_ch

    * campo4_ch

    * campo5_ch

agora, irei ter um ficheiro onde actualizo a chave semanal, depois terei um ficheiro onde verificarei o resultado, ou seja, à frente da aposta irá mostrar o resultado da comparação com a chave, quantos na aposta são iguais na chave.

tem a ver com isto...

obrigado a tds

Link to comment
Share on other sites

Tens aqui um script exemplo em SQL Server para veres como verificar se acertaste nos numeros do euromilhões.

Tira as ideias q precisares daí.


declare @aposta table(
 id int
,campo1 int
,campo2 int
,campo3 int
,campo4 int
,campo5 int
,estrela1 int
,estrela2 int
)

declare @chaveVenc table(
 id int
,campo1 int
,campo2 int
,campo3 int
,campo4 int
,campo5 int
,estrela1 int
,estrela2 int
)

insert into @aposta values(1, 10, 20, 30, 43, 51, 1, 2)
insert into @aposta values(2, 11, 22, 31, 40, 50, 3, 5)
insert into @chaveVenc values(1, 10, 20, 30, 40, 50, 1, 2)


select *, 'Aposta' as Tipo from @aposta
union all
select *, 'Vencedora' as Tipo from @chaveVenc

select	 t2.id
	,t2.Numeros
	,t2.Estrelas
	,case when t2.Numeros = 1 and t2.Estrelas = 2 then 'Premio'
		  when t2.Numeros >= 2 and t2.Estrelas >= 1 then 'Premio'
		  when t2.Numeros >= 3 and t2.Estrelas >= 0 then 'Premio'
		  else 'Azar'
	 end as Resultado
from (
select	t.id
	,t.C1 + t.C2 + t.C3 + t.C4 + t.C5 as Numeros
	,t.E1 + t.E2 as Estrelas
from (select	 a.id
	,case when a.campo1 in (c.campo1, c.campo2, c.campo3, c.campo4, c.campo5) then 1 else 0 end as C1
	,case when a.campo2 in (c.campo1, c.campo2, c.campo3, c.campo4, c.campo5) then 1 else 0 end as C2
	,case when a.campo3 in (c.campo1, c.campo2, c.campo3, c.campo4, c.campo5) then 1 else 0 end as C3
	,case when a.campo4 in (c.campo1, c.campo2, c.campo3, c.campo4, c.campo5) then 1 else 0 end as C4
	,case when a.campo5 in (c.campo1, c.campo2, c.campo3, c.campo4, c.campo5) then 1 else 0 end as C5
	,case when a.estrela1 in (c.estrela1, c.estrela2) then 1 else 0 end as E1
	,case when a.estrela2 in (c.estrela1, c.estrela2) then 1 else 0 end as E2
from @aposta a, @chaveVenc c
) t ) t2

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.