Jump to content


Photo

Atualizar Conteúdos Apenas Dps De 12h


  • Faça o login para participar
4 replies to this topic

#1 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 20/04/2009, 14:20

Boa tarde pessoaR

Estou desenvolvendo um sistema de compras on-line um pouco diferente, onde os fornecedores postam seus produtos sem depender de mim. Porém, para evitar uma concorrência desleal "por partes" (por ex: Eu postei no site um celular X a 499 reais, e meu concorrente a 399, e se eu ver isso, vou postar meu celular X a 299 para quebrar o concorrente) gostaria que isso não acontecesse.

A minha idéia é que, caso eu alterar o preço, o mesmo só seja visível depois de 12 horas. Assim, evita um pouco essa estratégia dos fornecedores. Porém como posso fazer? estou pensando em criar 2 colunas na tabela produtos, uma com o preço atual e outra com preço temporário, e com o CRONJOB, passar o conteúdo da tabela temporaria para a atual. Mas existe algum outro jeito mais simples de se fazer?

Edição feita por: maykel, 20/04/2009, 14:21.

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 20/04/2009, 14:54

maykel, você já pensou em trabalhar com condicional na query? Mas no seu caso você teria que registrar a data da atualização também.

Eu já ví funções e expressões para isso, nunca testei. Mais tarde eu posso testar...
att,
Muller Dias
ex-administrador Fórum WMO

#3 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 20/04/2009, 15:38

nunca ouvi falar disso s/. :ponder:

como se aplicaria? pq eu preciso que isso rode apenas em determinado horário :S

Mesmo se o cara postar as 10 da manhã, o sistema só seria atualizado meio-dia. Caso poste as 2 da tarde, só a meia-noite!

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 20/04/2009, 19:28

Antes de eu mostrar como fazer, eu vou explicar a lógica.

A tabela tem que ter um campo para o valor provisório, um campo para o valor definitivo e um campo do tipo DATETIME.

Quando alguém modificar o valor do produto, o novo valor vai cair no campo valor_definitivo e o valor antigo vai pular para o campo valor_provisorio. A cada UPDATE de valor, o campo datahora será atualizado com a função NOW().

Na hora de fazer a consulta para listar os produtos, a idéia é a seguinte:

Verificar quantas horas tem entre a data/hora que está no registro e a data/hora atual.

Se o resultado for maior ou igual a 12 horas, o valor_definitivo será atribuído ao alias valor. Caso contrário, o valor_provisorio é que será atribuido ao alias valor.

Agora eu vou mostrar como fazer isso...

Conheço duas formas de fazer esse negócio virar realidade. ^_^

Função IF() do MySQL

É bem simples, essa função lembra bastante a condicional resumida do PHP (codição ? verdadeiro : falso).

IF('condição', 'isso se for verdadeiro', 'isso se for falso')

Veja como aplicar:

SELECT IF(TIMEDIFF(NOW(), data) >= '12:00:00', valor_definitivo, valor_provisorio) as valor FROM tabela

TIMEDIFF(NOW(), data) >= '12:00:00' é a minha condição. TIMEDIFF retorna a diferença que existe entre a data/hora do registro e a data/hora atual. Se esse valor for maior ou igual a 12:00:00, o mysql vai pegar o valor_definitivo e atribuir ao alias valor, caso contrário vai pegar o valor_provisorio e atribuir ao alias valor.

Expressão CASE

É um pouco mais complexa, é bastante útil se quiser colocar várias condições seguindo aquela estrutura if, else if, else. Se não me engano, não é possível colocar várias condições na função IF() do MySQL.

(CASE WHEN 'condição' THEN 'isso se for verdadeiro' ELSE 'isso se for falso' END)

Veja a simulação do if, else if, else:

(CASE WHEN 'condição 1' THEN 'isso se for verdadeiro' WHEN 'condição 2' THEN 'isso se for verdadeiro' ELSE 'isso se não der verdadeiro em nenhuma condição' END)

Veja como aplicar:

SELECT (CASE WHEN TIMEDIFF(NOW(), data) THEN valor_definitivo ELSE valor_provisorio END) as valor FROM tabela


Acho legal você trabalhar com condicional na query, dessa forma quando alguém modificar o valor do produto, o novo valor só aparecerá depois de 12 horas exatas.

Gostou da pequena explicação? :lol:
att,
Muller Dias
ex-administrador Fórum WMO

#5 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 21/04/2009, 08:49

Caraca! Uma aula! heheeh, vou tentar fazer uns testes com isso aí! Vo pegar até a pipoca :snack:

Valeu mesmo a paciência s/.! Qualquer resultado posto aqui

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png





2 user(s) are reading this topic

0 membro(s), 2 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq