• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

serrano

comparar resultados de tabelas

19 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E qual é a fonte dos dados dessas tabelas? Queres isso feito em php ou isso vem de uma base de dados e o calculo pode ser feito na query?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O ideal acho que era fazer na query.

Isto serve para comparar stocks, vou tentar fazer gestão de stocks com php e mysql.até é capaz de haver já algum script já feito, mas gostava de elaborar o meu, mas agora fiquei parado por aqui por que não consigo comparar tablelas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não consigo por a funcionar assim..

Com esse exemplo só consigo comparar um campo de cada vez, eu quero tudo ao mesmo tempo.

mas obrigado na mesma.

Se alguem tiver interessado, eu pagarei pela ajuda.

bruno.chicote@gmail.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

select COUNT(*) as total from tabela1
where valor in (select valor from tabela 2)

Onde valor é a coluna onde tens 'a', 'b', ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado caro amigo.

Vou já experimentar, e depois como é que mostro valor, tenho que adicionar $result = mysql_query ou alguma coisa do genero?

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois..

isso do INNER JOIN pra mim é chinês, sei fazer uns selects simples e mal.

estava com esta ideia para fazer aqui umas cenas. bem vou tentar pesquisar por ai como comparar tabelas.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Coloca as tabelas q tens, e a tabela q queres como output.

Isto já devias ter feito logo no primeiro post, senão é complicado perceber o resultado q queres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Sim, é melhor, uma vez que cria as ligações entre as tabelas e também ao que parece é mais rápido, mas penso que esta é outra alternativa, e uma vez que o serrano disse que os Joins eram chinês para ele...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tou a coneguir..

se alguem quizer ajudar, bruno.chicote@gmail.com

eu pago..

cumps

serrano

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora