Ir para conteúdo
Fórum Script Brasil
  • 0

Selecionar A última Data


Guest Carlos César

Pergunta

Guest Carlos César

Pessoal, é meio complicado, então talvez eu não consiga explicar direito, mas estou com um problemão, é seguinte:

Com o select abaixo, preciso selecionar todas as empresasda tabela histórico cujo último dia de contato (campo data) seja maior que 30 dias, ou seja, empresas que estão há 1 mês sem contato. Só que esse SELECT faz iddo, mas pega também as empesas que tiveram contato depois ou seja: se hoje é dia 30/07, ele pega empresas que tem registro de 30/06 pra trás, mas tb de 30/06 pra frente. Empresas que não tem registro maiores q 30 dias ele não pega.

Consegui explicar direito? acho que, resumindo, é isso:

Preciso que o select pegue somente empresas que estejam com mais de 30 dias sem contato!

Aí vai o dito cujo:

"select DISTINCT(id_empresa), empresa from cliente, historico where (id_empresa=id AND TO_DAYS(NOW()) - TO_DAYS(data) >= 30) ORDER BY data LIMIT 0,3"

Valeu pela ajuda!

Carlos César

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Empresas que não tem registro maiores q 30 dias ele não pega.

Mas era pra pegar? Pelo o que eu entendi, você tá querendo pegar as empresas cujo o último dia de contato foi há mais de 30 dias. Se a empresa não tem registro maior que 30 dias, então o último contato dela está dentro desse tempo (ou ela simplesmente não tem um "último dia de contato")! Mas, caso você esteja querendo pegar as que ficaram mais de 30 dias sem entrar em contato (aí já abrange tudo), você pode fazer algo assim:

select DISTINCT(id_empresa), empresa from cliente, historico where ((id_empresa=id AND TO_DAYS(NOW()) - TO_DAYS(data) >= 30) OR (condicao para empresas que não tem registros maiores que 30 dias)) ORDER BY data LIMIT 0,3

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

so para començar como o campo data não foi selecionado, ele não pode ser usado em clause

Claro que pode!

Mas eu tava pensando agora... como ele tá trabalhando com 2 tabelas, talvez seja interessante especificar de qual ele está puxando esse campo, colocando "historico.data" ao invés de apenas "data".

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Carlos César

Isso mesmo, só que o que está acontecendo é o seguinte: tenho 5 empresas cadastradas, de teste. Uma delas tem 2 mensagens no histórico, uma no dia 20/06/2004 (há mais de 30 dias) e uma no dia 26/07/2004 (hoje). É a única das 5 que tem mensagem há mais de 30 dias. Esse select q passei tá pegando essa empresa e mostrando, porque ele tá lendo a data maior de 30 dias, mas tá passando por cima da outra, que é de hoje. O que eu quero é que ele veja a última data cadastrada: se for maior que 30 dias mostra, se for menor ou igual a hoje, não mostre ninguém! Nossa, minha cabeça tá fervendo com esse códogo, hehehe...

Valeu!

Carlos César

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Carlos César

Desculpem, realmente é melhor nomeas os campos.. aí vai:

$query_rsPostIt = "select DISTINCT(historico.id_empresa), cliente.empresa from cliente, historico where (historico.id_empresa=id AND TO_DAYS(NOW()) - TO_DAYS(historico.data) >= 30) ORDER BY data LIMIT 0,3";

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

pode ter certeza que não pode mesmo

a requesta esta toda errada

1 se seleciona os campos que o servidor vai processar

2 se cria os filtros para deixar os dados que quer tratar

não se pode filtrar dados que não foram selecionados

o distinct esta errado

a seleçao esta errada

Link para o comentário
Compartilhar em outros sites

  • 0
Uma delas tem 2 mensagens no histórico, uma no dia 20/06/2004 (há mais de 30 dias) e uma no dia 26/07/2004 (hoje).

ixi... agora confundi tudo! É pra pegar os 2 últimos contatos da empresa, ou só o último contato e subtrair da data atual?

Só um detalhe, acho que faltou especificar um campo:

$query_rsPostIt = "select DISTINCT(historico.id_empresa), cliente.empresa from cliente, historico where (historico.id_empresa=cliente.id AND TO_DAYS(NOW()) - TO_DAYS(historico.data) >= 30) ORDER BY data LIMIT 0,3";

Faltou mesmo? O resultado dessa query com os campos nomeados é o mesmo?

Link para o comentário
Compartilhar em outros sites

  • 0

Caraca, que coisa complicada de explicar, até eu to me confundindo...

Seguinte: realmente faltou especificar o cliente.id, e o resultado da query com os campos nomeados deu a mesma coisa.

Quanto à query, acho melhor explicar como funciona o programa: é um programa de acompanhamento de clientes. O cara faz o cadastro da empresa na tabela cliente. Quando ele consegue falar com alguém da empresa, escreve o que foi convesado na tabela histórico: Dia 27/05 - o Cliente pediu pra não ligar depois; Dia 26/07 - o cliente pediu pra não ser mais importunado. Portanto, na tabela histórico, há vários registros do mesmo id_empresa, com várias datas diferentes, pois há várias mensagens postadas em dias diferentes. A query vai funcionar como um lembrete: "olha, tem uma empresa que está há mais de 30 dias sem contato! Clique aqui pra ver qual é!".

Acho que expliquei melhor agora, não? Desculpem, mas é que é meio confuso mesmo... e obrigado pela ajuda!

Carlos César

Link para o comentário
Compartilhar em outros sites

  • 0

Carlos,

Tá meio complicado, mesmo... eu não conheço uma forma de resolver isso só no select. Pode até ser que exista, mas não conheço. Então, acho que o jeito é tentar resolver no código PHP, mesmo.

Uma solução pra isso seria você criar um método (ou uma função) que retorne o último contato de uma empresa. Por exemplo, você fornece o "id" da empresa, e ele traz num array todos os dados do último contato: data, mensagem, etc..

Aí, na página que vai imprimir as empresas que estão há mais de 1 mês sem contato, você faz uma consulta na tabela "cliente" pra retornar todas as empresas. Então cria um laço pra imprimir o resultado dessa consulta, mas crie tb uma condicional na hora de imprimir. Essa condicional vai verificar a data do último contato, que você vai pegar pelo método (ou função) que executa essa tarefa.

Ficou muito complicado? Acho que não... resumindo tudo, são só dois passos: consulta na tabela cliente e verificação da data. smile.gif

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo tenta isso:

primeiro faça um busca do mes todo ,se a busca não achar nenhum registro no mes todo, ele vai fazer a busca no mes anterior

$data_inicial = date("Y-m-01");

$data_final  = date("Y-m-t");

$query  = "select DISTINCT(id_empresa), empresa from cliente, historico where data between '$data_inicial' and '$data_final'";

$re = mysql_query($query);

$total = mysql_num_rows($re);

if ($total == 0) {

// vai selecionar as datas que forem igual ou menor que 30 dias atraz

"select DISTINCT(id_empresa), empresa from cliente, historico where (id_empresa = id AND MONTH(data) <= MOD(MONTH(CURDATE()), 12) - 1) ORDER BY data LIMIT 0,3"

}

Link para o comentário
Compartilhar em outros sites

  • 0

Cara deixa de ser trouxa se quer ser o cara, mas não é assim que funciona as coisas

quer postar, posta mas não fica querendo da uma de melhor que os outros não que

isso não é legal

e outra coisa eu testo as coisas que eu faço, por acaso se já testou pra ta falando que

não funciona?

e nem em sonho você pode ser o cara seja mais humilde

se ta viajando na maionese = )

Link para o comentário
Compartilhar em outros sites

  • 0

@fabyo

mania de ums tipo brasileiros como você que so porque sabe alinhar algumas linhas de codigo pensam que e bom e que o codigo esta perfeito

você pega o seu endereço mail e faça uma pesquisa no google para ver se você existe

e depois você faça o mesmo com um dos meus endereço roger.girardin@caramail.com

isso que eu esconde os meus trabalhos

antes de escrever uma palavra de tipo trouxa você se olha num espelho premeiro

Link para o comentário
Compartilhar em outros sites

  • 0

SEM COMENTARIOS ,SE QUE TA SE ACHANDO VE SE SE ENCHERGA CARA

não QUERO FAZER NOME IGUAL você TA QUERENDO

O QUE você GANHA QUERENDO PROVAR QUE OUTRA PESSOA ESTA ERRADA?

AQUI não É LUGAR DE COMPETIÇÃO QUEM FAZ MELHOR

E OUTRA COISA EU FAÇO MUITO BEM AS COISAS QUE ME COMPETEM

SE QUER COMPETIR PROCURO DESAFIOS PRA você RESOLVER

você QUE COMEÇOU QUERENDO TIRAR AS PESSOAS DAQUI ,QUEM ME CONHECE SABE

COMO EU SOU, não É você QUE VAI FAZER EU MELHOR OU PIOR

EU ME GARANTO SOZINHO, E OUTRA SE FICA DANDO UMA DE BOM E MAL O

PORTUGUES você ESCREVE DIREITO

FICA NA PAZ biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

E cara você esta ganhando quanto para provar que um é melhor que o outro?? não estamos em desafio nenhum. Se voce sabe então responde e tenha certesa que esta certo, agora voce nem testar o codigo do fabyo e dizer que ta errado, isso é embaçado né cara...

Confira antes! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

@taudujas

não leva a mal amigo esse code eu não preciso testar para dizer que esta errado

se por milagre ele trouxer um resultado, e num servidor como easyphp que nunca vai funcionar num servidor decente

data id_empresa empresa são aleatorios

-----------------------------------------

ta limpo fabyo

por mais alto que seja o meu nivel, eu apprendo coisas novas todos os dias

por mais que eu esteja famoso no mundo, eu ando desconhecido em forum como esse aqui a procura de ajudar.

vai em frente na busca de conhecimente, advanced users e uma familia grande e tem vagas para todos que se esforçam

ps : meu portugues e podre mesmo ; deve ser porque eu trabalho na frança há sete anos em audit de segurança de rede informatica

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, esse tipo de coisa me chateia muito...

Não importa quem você seja, Roger. O fato de você trabalhar em outro país ou de seu nome sair na busca do Google não te torna melhor do que ninguém. Se você fica pelo fórum só pra criticar e se esnobar em cima de quem está tentando ajudar aos outros, então eu tenho pena de você...

E é uma pena, mesmo. Pois acredito que você poderia ajudar muito, se realmente é verdade tudo isso que você diz (nem duvido que seja). você teria uma grande experiência pra passar para a galera. E com certeza, aprenderia muito, tb. Mas no entanto você se limita a ficar provocando a gente quando respondemos a alguma dúvida...

Infelizmente não podemos fazer nada. Só peço que você tenha um pouco de bom senso... e, se for pra criticar, critique de uma forma construtiva. Eu juro que humildade não mata!

Link para o comentário
Compartilhar em outros sites

  • 0

Roger e quem disse que eu uso o Easy PHP?? não gosto de pacotes não cara, eu uso é o apache 2.049 + PHP5 e MySQL 4.1. e esta certinho o codigo dele. Se tem alguém que esta errado esse alguém é voce. Um dia voce foi um aprendiz, não se esqueça disso que ninguém nasceu sabendo.

abraços. biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

@Illidan

ta limpo tb

eu na realidade fiquei revoltado com o atraso tecnologico que o brasil tomou

a persistança no erro de certos postos me irritou um pouco tb

não e porque eu estou na europa que eu estou feliz

sei la se eu offendi alguém eu peço desculpa

http://membres.lycos.fr/rogergirardin/index.php

vou organizar e por umas funçoes para ajudar

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...