Ir para conteúdo

POWERED BY:

Arquivado

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

D'Emery

Consultar 2 Tabelas

Recommended Posts

Olá Galera,

 

Estou tentando selecionar os registro da tabela classificados_anuncio, porém só me interessa os que ainda não foram pagos ou não totalmente pagos.

 

Atenção: Os não totalmente pagos são aqueles registro que ainda não contem nem data_ativo e nem data_validade ou são 0000-00-00

 

Então digitei o seguinte código:

 

SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.cpf='CPF' AND classificados_anuncio.codigo!=pagamento_anuncio.codigo_anuncio OR  classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='' OR pagamento_anuncio.data_ativo='0000-00-00' AND pagamento_anuncio.data_validade='' OR pagamento_anuncio.data_validade='0000-00-00' ORDER BY classificados_anuncio.codigo ASC

 

Desse modo não tive êxito. Então tentei de uma outra forma:

 

SELECT * FROM classificados_anuncio WHERE cpf='CPF' AND (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo!=pagamento_anuncio.codigo_anuncio) OR (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='' AND pagamento_anuncio.data_validade='') OR (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='0000-00-00' AND pagamento_anuncio.data_validade='0000-00-00') ORDER BY codigo ASC

 

Também não deu muito certo, daí tentei uma terceira forma:

 

SELECT * FROM classificados_anuncio JOIN pagamento_anuncio ON classificados_anuncio.cpf='CPF' WHERE  (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo!=pagamento_anuncio.codigo_anuncio) OR (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='' AND pagamento_anuncio.data_validade='') OR (SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='0000-00-00' AND pagamento_anuncio.data_validade='0000-00-00') ORDER BY classificados_anuncio .codigo ASC

 

Então na terceira eu desisti, e venho pedir, humildemente, a ajuda de vocês!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei o suposto erro! Só não sei como coloca-lo em MySQL

 

Eu quero os registro da tabela classificados_anuncio, que não estejam (com o mesmo código) na tabela pagamento_anuncio.

 

Vamos lá:

 

SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.cpf='CPF' AND classificados_anuncio.codigo!=pagamento_anuncio.codigo_anuncio

 

Só que ao colocar desse jeito, ele me mostra os registro que não contem o mesmo código da tabela pagamento_anuncio. E não é isso que eu quero, eu quero que ele só me mostre os registros que não contem pagamento.

 

Só deixando claro quais campos são de cada tabela:

 

classificados_anuncio

  • codigo
  • anuncio

 

pagamento_anuncio

  • codigo
  • codigo_anuncio (esse é o código que identifica o anúncio)
  • data_ativo
  • data_validade (data até quando irá ficar exposto o anúncio)

 

Além de mostrar os registros que não foram pagos, necessito que mostre-me os registro que foram iniciado o pagamento, mas não concluídos.

 

Exemplo, o cara iniciou o pagamento, mas vai pagar por boleto bancário e ainda não o pagou.

 

Para isso fiz o seguinte:

 

SELECT * FROM classificados_anuncio JOIN pagamento_anuncio WHERE classificados_anuncio.cpf='CPF' AND classificados_anuncio.codigo=pagamento_anuncio.codigo_anuncio AND pagamento_anuncio.data_ativo='0000-00-00' AND pagamento_anuncio.data_validade='0000-00-00'

 

Para indicar que já iniciou o processo de pagamento e não foi efetivado o sistema deixa as datas em 0000-00-00.

 

O que eu necessito é exatamente ter os dois tipo de respostas, quando ele não tem nenhum registro de pagamento e quando ele iniciou a seção de pagamento mais não concluiu.

 

Alguém poderia me explicar como funciona?

 

Ninguém que possa me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

D'Emery, vamos por partes:

1º você quer pegar os registros da tabela classificados_anuncio que não tem pagamento, ou seja, não estão na tabela pagamento_anuncio

SELECT 
   * 
FROM 
   classificados_anuncio 
       LEFT JOIN pagamento_anuncio ON (classificados_anuncio.codigo != pagamento_anuncio.codigo_anuncio)
WHERE 
   classificados_anuncio.cpf='CPF'    

Neste eu utilizo o LEFT JOIN para trazer os dados da Tabela a esquerda classificados_anuncio e que o campo codigo seja diferente do codigo_anuncio.

 

2º Trazer todos os anuncios que ainda não foram efetivados os pagamentos:

SELECT 
   * 
FROM 
   classificados_anuncio 
       INNER JOIN pagamento_anuncio ON (classificados_anuncio.codigo = pagamento_anuncio.codigo_anuncio)
WHERE 
   classificados_anuncio.cpf='CPF'             AND 
   pagamento_anuncio.data_ativo='0000-00-00'   AND 
   pagamento_anuncio.data_validade='0000-00-00' 

Neste caso utilizo o INNER JOIN para só buscar os classificados que tem registro na tabela pagamento_anuncio e os campos de data tenham o valor '0000-00-00'.

Veja se isso lhe ajuda e qualquer coisa é só postar.

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.