Ir para conteúdo

POWERED BY:

Arquivado

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

11closed

consutar 3 tabelas em ordem de Data

Recommended Posts

ola tudo bem ?

 

estou criando um esquema de atualizações mais recente.

 

gostaria de consutar 3 tabelas ao msm tempo e imprimir os resultados em ordem de data.

eu fis esse codigo, mas acho que ele ñ vai dar certo.. postei aq para tentar explicar oq eu quero.

 

tipo assim:


$sql2 = "SELECT * FROM ".$tabela27." WHERE CODIGOID_USERS_USERS_ASSINATURAS = '".$linha1["ID_USERS"]."'";
$query2 = mysql_query($sql2);
$quants2 = mysql_num_rows($query2);
while($linha2 = mysql_fetch_array($query2)){
$sql6 = "SELECT * 
FROM $tabela12,$tabela3,$tabela5 
WHERE CODIGOID_CONTRATO_EMP = '".$linha2["CODIGOID_EMP_USERS_ASSINATURAS"]."' && ATIVO_CONTRATO_EMP = 'S' || IDCODIGO_EVENTOS_EMP = '".$linha2["CODIGOID_EMP_USERS_ASSINATURAS"]."' || CODIGOID_PRODUTOS_EMP = '".$linha2["CODIGOID_EMP_USERS_ASSINATURAS"]."' 
ORDER BY DATACADASTRO_CONTRATO_EMP,DATACADASTRO_EVENTOS_EMP,DATACADASTRO_PRODUTOS_EMP ASC ";
$query6 = mysql_query($sql6);
while($linha6 = mysql_fetch_array($query6)){
	if ($linha6["ID_CONTRATO_EMP"] != "") {
		echo "Contrato - ".$linha6["ID_CONTRATO_EMP"]."- ".$linha6["DATACADASTRO_CONTRATO_EMP"]."<br>";
	} if ($linha6["ID_EVENTOS_EMP"] != "") {
		echo "Eventos - ".$linha6["ID_EVENTOS_EMP"]."- ".$linha6["DATACADASTRO_EVENTOS_EMP"]."<br>";
	} if ($linha6["ID_PRODUTOS_EMP"] != "") {
		echo "Produtos - ".$linha6["ID_PRODUTOS_EMP"]."- ".$linha6["DATACADASTRO_PRODUTOS_EMP"]."<br>";
	}	
}
}

 

 

esta imprimindo assim:

Contrato - 3 - 2011-06-15

Eventos - 20 - 2011-01-20

Produtos - 54 - 2011-07-20

Contrato - 3 - 2011-06-15

Eventos - 20 - 2011-01-20

Produtos - 55 - 2011-08-31

Contrato - 3 - 2011-06-15

Eventos - 20 - 2011-01-20

Produtos - 42 - 2011-12-01

Contrato - 3 - 2011-06-15

Eventos - 20 - 2011-01-20

Produtos - 37 - 2011-12-02

.... etc

 

 

seguindo o exemplo acima Gostaria que imprimisse nessa ordem, e sem repetir resultados

 

Produtos - 37 - 2011-12-02

Produtos - 42 - 2011-12-01

Produtos - 55 - 2011-08-31

Produtos - 54 - 2011-07-20

Contrato - 3 - 2011-06-15

Eventos - 20 - 2011-01-20

.... etc

O comando && ATIVO_CONTRATO_EMP = 'S' não esta funcionando pq sera?

 

alguem sabe uma forma correta de fazer esse esquema ?

quem souber por favor, ficarei muito grato pela ajuda !!!

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola

 

vou mostrar minhas tabelas

 

na tabela27

 

CODIGOID_USERS_USERS_ASSINATURAS - id do usuario

CODIGOID_EMP_USERS_ASSINATURAS - id da empresa

 

$tabela12

CODIGOID_CONTRATO_EMP - id da empresa que cadastro esse contrato

ATIVO_CONTRATO_EMP - se o contrato ta ativo ou não

DATACADASTRO_CONTRATO_EMP data de cadastro do contrato

 

$tabela3

IDCODIGO_EVENTOS_EMP - id da empresa que cadastro esse evento

DATACADASTRO_EVENTOS_EMP - data de cadastro do evento

 

$talbela5

CODIGOID_PRODUTOS_EMP - id da empresa que cadastro esse produto

DATACADASTRO_PRODUTOS_EMP - data de cadastro do produto

 

 

a tabela27 tem quantas empresas o usuario assina

 

então eu quero selecionar todas as empresas que o usuario assina e imprimir em ordem de data mais recentes os recursos das empresas ($tabela12, $tabela3 e $tabela5)

 

como faço isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá galera andei pesquisando muito e percebi que isso teve ser feito usando o comando

INNER JOIN

fis varios teste aq mas ñ obtive bons resultados.

como que eu faço para vincular essas tabelas em uma só consuta para que na hora que imprimir os resultados no loop em ordem de Data;

preciso selecionar

CODIGOID_USERS_USERS_ASSINATURAS onde = ao id do user, ai pegar os resultados de CODIGOID_EMP_USERS_ASSINATURAS e selecionar onde

ai imprimir tudo em ordem de datas

alguem saberia me dar uma luz ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi exatamente o relacionamento de suas tabelas, mas a lógica é esta:

 

SELECT t1.campo_qualquer. t2.campo_qualquer FROM tabela01 t1 LEFT JOIN tabela02 t2 ON(t2.id = t1.referenciaID) LEFT JOIN tabela03 t3 ON(t3.id = t1.referenciaID) WHERE ... ORDER BY data DESC;

 

Tente substituir as tabelas pelas suas reais e veja se é o que pretende.

Em "ON()", informe os campos que se relacionam nas tabelas.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá galera andei pesquisando muito e percebi que isso teve ser feito usando o comando

INNER JOIN

fis varios teste aq mas ñ obtive bons resultados.

como que eu faço para vincular essas tabelas em uma só consuta para que na hora que imprimir os resultados no loop em ordem de Data;

preciso selecionar

CODIGOID_USERS_USERS_ASSINATURAS onde = ao id do user, ai pegar os resultados de CODIGOID_EMP_USERS_ASSINATURAS e selecionar onde

ai imprimir tudo em ordem de datas

alguem saberia me dar uma luz ?

 

Seria mais ou menos isso ?

select tabela27.CODIGOID_USERS_USERS_ASSINATURAS,tabela27.CODIGOID_EMP_USERS_ASSINATURAS,tabela12.CODIGOID_CONTRATO_EMP,tabela12.ATIVO_CONTRATO_EMP,tabela12.DATACADASTRO_CONTRATO_EMP,tabela3.IDCODIGO_EVENTOS_EMP,tabela3.DATACADASTRO_EVENTOS_EMP,talbela5.CODIGOID_PRODUTOS_EMP,talbela5.DATACADASTRO_PRODUTOS_EMP

from tabela27

inner join tabela12 on tabela12.CODIGOID_CONTRATO_EMP = tabela27.CODIGOID_EMP_USERS_ASSINATURAS 

inner join tabela3 on tabela27.CODIGOID_USERS_USERS_ASSINATURAS = tabela3.IDCODIGO_EVENTOS_EMP 

inner join tabela5 on tabela27.CODIGOID_USERS_USERS_ASSINATURAS = talbela5.CODIGOID_PRODUTOS_EMP

where tabela27.CODIGOID_USERS_USERS_ASSINATURAS = ao id do user ??? and tabela12.ATIVO_CONTRATO_EMP = S  order by talbela5.DATACADASTRO_PRODUTOS_EMP

 

agora eu fiquei em dúvida se você quer fazer order by com talbela5.DATACADASTRO_PRODUTOS_EMP ou com tabela3.DATACADASTRO_EVENTOS_EMP não entendi direito.

 

Espero ter pelo menos dado uma luz poruqe não faço a mínima idéia se o código está funcionando.

Até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de ajudar, mas, seria muito mais fácil se você postasse o conteúdo (3 a 5 linhas de cada tabela) das tabelas em sql. Assim fica mais fácil recriar o ambiente do seu projeto e fazer testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá NEOS

 

vo mandar as tabelas

 

tabela27

CODIGOID_USERS_USERS_ASSINATURAS

1

3

1

CODIGOID_EMP_USERS_ASSINATURAS

1

1

2

 

aq quer dizer que o usuario "1" assina a empresa 1 e 2 e o usuario 3 assina a empresa 1.

 

tabela12

CODIGOID_CONTRATO_EMP

2

1

1

S

N

S

2011-12-01

2011-06-15

2011-12-02

aq quer dizer que a empresa 2 cadastrou um contrato e ele esta Ativo e a empresa 1 cadastrou dois contratos e um esta Ativo e o outro esta Inativo.

 

tabela3

IDCODIGO_EVENTOS_EMP |

1

2

3

2011-11-01

2011-12-01

2011-11-01

 

aq quer dizer que a empresa "1" cadastrou um evento dia 2011-11-01 e a empresa" 2" 2011-12-01 e a empresa "3" 2011-11-01

tabela5

1

2

3

2011-12-01

2011-07-01

2011-10-11

aq é a msm coisa a empresa "1 2 e 3 cadastraram um produto cada em tal data"

Logico que ñ esta todos os campos ai apenas os pricipais para criar esse script, ok.

ex: quando o usuario loga na pagina vai verificar id do usuario igual a

CODIGOID_USERS_USERS_ASSINATURAS e pegar as empresas que o usuario assina, por exemplo se for o usuario "1" que esta logado vai pegar de CODIGOID_EMP_USERS_ASSINATURAS a empresa 1 e 2, ai era emprimir em ordem de datas tudo onde CODIGOID_PRODUTOS_EMP, IDCODIGO_EVENTOS_EMP e CODIGOID_CONTRATO_EMP = a 1 ou 2 e ATIVO_CONTRATO_EMP = S. certo ?

Daniel1 eu testei o script que você passou, e foi de grande ajuda, dexei assim


select *
from $tabela27
inner join $tabela12 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela12.CODIGOID_CONTRATO_EMP
inner join $tabela3 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela3.IDCODIGO_EVENTOS_EMP
inner join $tabela5 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela5.CODIGOID_PRODUTOS_EMP
where $tabela27.CODIGOID_USERS_USERS_ASSINATURAS = '".$id_user."' && $tabela12.ATIVO_CONTRATO_EMP = 'S'
ORDER BY $tabela12.DATACADASTRO_CONTRATO_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP ASC

Só que não esta em ordem de datas, e esta repetindo resultados tentei colocar DISTINCT mas ñ funcionou, ñ sei oq estou fazendo de errado..

Na hora de imprimir o resultados como seria assim:


$sql = "select DISTINCT *
from $tabela27
inner join $tabela12 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela12.CODIGOID_CONTRATO_EMP
inner join $tabela3 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela3.IDCODIGO_EVENTOS_EMP
inner join $tabela5 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela5.CODIGOID_PRODUTOS_EMP
where $tabela27.CODIGOID_USERS_USERS_ASSINATURAS = '".$id_user."' && $tabela12.ATIVO_CONTRATO_EMP = 'S'
ORDER BY $tabela12.DATACADASTRO_CONTRATO_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP DESC";
$query = mysql_query($sql);
$quants = mysql_num_rows($query);
while($linha = mysql_fetch_array($query)){
if ($linha["ID_PRODUTOS_EMP"] != "") {
echo $linha["ID_PRODUTOS_EMP"]."<br>";
}

if ($linha["ID_EVENTO_EMP"] != "") {
echo $linha["ID_EVENTO_EMP"]."<br>";
}
if ($linha["ID_CONTRATO_EMP"] != "") {
echo $linha["ID_CONTRATO_EMP"]."<br>";
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

select *from $tabela27inner join $tabela12 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS  = $tabela12.CODIGOID_CONTRATO_EMP inner join $tabela3 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela3.IDCODIGO_EVENTOS_EMP inner join $tabela5 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela5.CODIGOID_PRODUTOS_EMPwhere $tabela27.CODIGOID_USERS_USERS_ASSINATURAS = '".$id_user."' && $tabela12.ATIVO_CONTRATO_EMP = 'S'ORDER BY $tabela12.DATACADASTRO_CONTRATO_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP  ASC

 

 

Você não pode por um select * porque se sua tabela tem mais campos que você quer pegar e mostrar vai dar erro, tem que colocar do jeito que fiz:

select Tabela1.nomedocampo, Tabela1.nomedocampo2, Tabela2.nomedocampo,Tabela2.nomedocampo2

etc

 

para o sql saber de qual tabela é aquele campo, porque eu posso por exemplo, ter id na tabela1,tabela2 e tabela3

 

se eu quero dar um select na tabela1 e saber os dados de todas as outras tabelas unindo com inner join eu não posso simplesmente fazer isso:

select * from Tabela1 inner join tabela2 on tabela1.id=tabela1.id 

ele vai selecionar somente os ids da tabela1 se os dados da Tabela1 forem iguas da tabela2.

 

Ou talvez todos os dados da tabela 1 eu não testei então não sei direito o que vai acontecer, mas eu acho que só os dados da tabela1 aparecem e não das outras tabelas, ou talvez mais grave aparece todos os dados de todas as tabelas que você uniu com inner join se as condições forem as que você propos.

 

Agora olha da diferença:

 

select tabela1.id,tabela2.id inner join tabela2 on tabela1.id=tabela2.id

agora ele vai mostrar o id da tabela 1 e da tabela 2 se o id da tabela 1 for igual da tabela 2

Bom eu não sou muito bom em sql mas é mais ou menos isso que entendo de sql server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Daniel1 obrigado pela dica.

 

olha fico assim


select DISTINCT 
	$tabela3.ID_EVENTOS_EMP, $tabela3.IDCODIGO_EVENTOS_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP,
	$tabela5.ID_PRODUTOS_EMP, $tabela5.CODIGOID_PRODUTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP, 
	$tabela12.ID_CONTRATO_EMP, $tabela12.CODIGOID_CONTRATO_EMP, $tabela12.DATACADASTRO_CONTRATO_EMP,
	$tabela27.CODIGOID_USERS_USERS_ASSINATURAS, $tabela27.CODIGOID_EMP_USERS_ASSINATURAS
	from $tabela27
	inner join $tabela12 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS  = $tabela12.CODIGOID_CONTRATO_EMP 
	inner join $tabela3 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela3.IDCODIGO_EVENTOS_EMP 
	inner join $tabela5 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela5.CODIGOID_PRODUTOS_EMP
	where $tabela27.CODIGOID_USERS_USERS_ASSINATURAS = '".$id_user."' && $tabela12.ATIVO_CONTRATO_EMP = 'S'
	ORDER BY $tabela12.DATACADASTRO_CONTRATO_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP DESC

 

 

na hora de imprimir os resultados como que eu faço ?

fiz assim, mas não deu certo.


while($linha2 = mysql_fetch_array($query2)){
if ($linha2["ID_PRODUTOS_EMP"] != "") {
           	echo "Produto - ".$linha2["ID_PRODUTOS_EMP"]."<br>"; 
           }else
		if ($linha2["ID_EVENTOS_EMP"] != "") {
           	echo "Eventos - ".$linha2["ID_EVENTOS_EMP"]."<br>"; 
           }else
           if ($linha2["ID_CONTRATO_EMP"] != "") {
           	echo "Contratos - ".$linha2["ID_CONTRATO_EMP"]."<br>"; 
           }
}

 

 

dessa forma imprimiu varios produtos, e os eventos e contratos não imprimiu nenhum.

e mais uma pergunta parece que o comando DISTINCT, não esta funcionando, pois os resultados estão repetindo

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

select DISTINCT 
               $tabela3.ID_EVENTOS_EMP, $tabela3.IDCODIGO_EVENTOS_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP,
               $tabela5.ID_PRODUTOS_EMP, $tabela5.CODIGOID_PRODUTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP, 
               $tabela12.ID_CONTRATO_EMP, $tabela12.CODIGOID_CONTRATO_EMP, $tabela12.DATACADASTRO_CONTRATO_EMP,
               $tabela27.CODIGOID_USERS_USERS_ASSINATURAS, $tabela27.CODIGOID_EMP_USERS_ASSINATURAS
               from $tabela27
               inner join $tabela12 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS  = $tabela12.CODIGOID_CONTRATO_EMP 
               inner join $tabela3 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela3.IDCODIGO_EVENTOS_EMP 
               inner join $tabela5 on $tabela27.CODIGOID_EMP_USERS_ASSINATURAS = $tabela5.CODIGOID_PRODUTOS_EMP
               where $tabela27.CODIGOID_USERS_USERS_ASSINATURAS = '".$id_user."' && $tabela12.ATIVO_CONTRATO_EMP = 'S'
               ORDER BY $tabela12.DATACADASTRO_CONTRATO_EMP, $tabela3.DATACADASTRO_EVENTOS_EMP, $tabela5.DATACADASTRO_PRODUTOS_EMP DESC

 

Não entendi, porque está usando $tabela3.campo_que_quer_pegar na tabela ? não seria mais fácil colocar tabela3.campo_que_quer_pergar, no meu ponto de vista variaveis do php não funcionam bem junto com sql server se quer unir strings tem que usar "alguma coisa ".$variavel." alguma coisa"

 

olha eu vou montar as tabelas e ver o que está acontecendo ok amanhã ou depois de amanhã eu retorno com algum resultado.

Até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola Daniel1, retirei as variaveis e coloquei os nomes das tabelas, como você disse: mas o resultado foi o msm.

 

vou aguardar seus resultados, ok .... obrigado t+

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.