D'Emery 0 Denunciar post Postado Maio 3, 2011 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
D'Emery 0 Denunciar post Postado Maio 4, 2011 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
Wess 1 Denunciar post Postado Maio 6, 2011 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