Ir para conteúdo

POWERED BY:

Arquivado

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

gamesmax2

remover dados duplicados de uma string ou sql

Recommended Posts

Boa noite, pessoal estou tentando remover dados duplicadas do banco de sql .

 

estou criando um gráfico de avarias e faço consulta pelo banco de dados, já tentei tentei DISTINCT, Group, order e array_unique e nada funcionou.

Tenho o banco de dados vários registro no mesmo dia, quero  remover todos os dias duplicados e mostra apenas um registro.

 

exemplo no dia 21 teve 5 registro, fazendo a consultar vai me retornar o 5 registro com  dia 21 , quero apenas que me retorne um registro.

 

pessoal do forum, peço que me ajude, por favor estou quebrando a cabeça.

        <?php
            
     
//aqui pega dados de ate um ano da data do banco de dados\\

$sql1 = "SELECT * FROM avaria WHERE YEAR(data) = YEAR(CURRENT_DATE)";
$stmt1 = $PDO->prepare($sql1);
$stmt1->execute();
 
 
 while($avaria = $stmt1->fetch(PDO::FETCH_ASSOC)):
     
     
  $datadia = date("d", strtotime($avaria['data']));
    $datames = date("m", strtotime($avaria['data']));
   
//aqui e o problema faço o filtro extraio a data e pego apenas o dia e o mes, so que continua aparece pois tem varios dados do mesmo dia, quero quer remover essa duplicidade de dias e memanda apenas um registro para pode fazer o grafico, ja tentei de tudo e nada funcionou\\

$sql2 = "SELECT DISTINCT EXTRACT(day FROM data) as data  FROM avaria where DAY(data) = '$datadia' AND MONTH(data) = '$datames' ";
$stmt2 = $PDO->prepare($sql2);
$stmt2->execute();   
     while($avaria1 = $stmt2->fetch(PDO::FETCH_ASSOC)):

  $data3 = date("d", strtotime($avaria1['data'])) ;
  $valores = $avaria1;




  // vamos remover os elementos duplicados
  $valores = array_unique($valores, $data3);
  
  // vamos exibir os valores do array novamente
  echo "<br>";
  foreach($valores as $valor){
    echo $valor . " - ";
  }


 // manter duplicados diferenciando dos demais
  $valores = array_unique($valores);
  
  // vamos exibir os valores do array novamente
  echo "<br><br>Elementos duplicados:<br>";
  foreach($valores as $valor){
    echo $valor . " - ";
  }


  endwhile;


  endwhile;
  
?>    

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

gamesmax2

SELECT DISTINCT EXTRACT(day FROM data) as data  FROM avaria where DAY(data) = '$datadia' AND MONTH(data) = '$datames' group by DAY(data), MONTH(data) LIMIT1";

Experimenta colocar GROUP BY, este comando agrupa todos os resultados IGUAIS.

 

Exemplo tabela:

dia.         mes

1             1

1             2

1             1

2             2

2             2

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

5 registros.

 

Na tabela acima tenho 5 registros

Se eu agrupar por DIA e por MÊS, meu resultado será

dia.         mes

1             1

1             2

2             2

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

3 registros.

 

Se eu quiser trazer apenas 1 registro adiciono o comando LIMIT 1 e o meu resultado será

dia.         mes

1             1

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

1 registro.

 

Recomendo você ler sobre GROUP BY dentro do artigo do W3SCHOOLS.

 

Posso realizar ordenação ORDER BY DIA DESC, MES DESC e o meu resultado final será

dia.         mes

2             2

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

1 registro.

 

Se a resposta lhe for útil, não esqueça de agradescer o POST e votar positivo.

Espero ter ajudado de alguma forma

 

Att
Felipe Guedes Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites
24 minutos atrás, Felipe Guedes Coutinho disse:

gamesmax2


SELECT DISTINCT EXTRACT(day FROM data) as data  FROM avaria where DAY(data) = '$datadia' AND MONTH(data) = '$datames' group by DAY(data), MONTH(data) LIMIT1";

 Experimenta colocar GROUP BY, este comando agrupa todos os resultados IGUAIS.

 

Exemplo tabela:

dia.         mes

1             1

1             2

1             1

2             2

2             2

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

5 registros.

 

Na tabela acima tenho 5 registros

Se eu agrupar por DIA e por MÊS, meu resultado será

dia.         mes

1             1

1             2

2             2

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

3 registros.

 

Se eu quiser trazer apenas 1 registro adiciono o comando LIMIT 1 e o meu resultado será

dia.         mes

1             1

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

1 registro.

 

Recomendo você ler sobre GROUP BY dentro do artigo do W3SCHOOLS.

 

Posso realizar ordenação ORDER BY DIA DESC, MES DESC e o meu resultado final será

dia.         mes

2             2

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

1 registro.

 

Se a resposta lhe for útil, não esqueça de agradescer o POST e votar positivo.

Espero ter ajudado de alguma forma

 

Att
Felipe Guedes Coutinho

Sim o do limit eu sei, só que eu quero que mostre pro exemplo apenas um resultado do dia 1 mesmo que exista 100 registro no banco de dados, quero que tenha todos os dados mas não quero que duplique o dia

 

dia   mes

1      1

2       1

3        1

 

então nesse caso a função Limit não funciona, acho que seria melhor utilizar algum tipo de array, só que array_unique não funcionou, não sei se é meu código que esta bagunçado

Compartilhar este post


Link para o post
Compartilhar em outros sites

gamesmax2

Eu escrevi tanta informação e dei mais do que uma só dica com exemplo e LINK e você só se resumiu em ler sobre o LIMIT

 

Experimenta o GROUP BY como eu mencionei no meu POST anterior, o GROUP BY ELIMINA REGISTROS COM INFORMAÇÕES DUPLICADAS que é o seu caso.

 

Faça um teste usando o GROUP BY e seja feliz.

 

Se precisa de dicas eu RECOMENDO LER SOBRE  W2SCHOOLS - GROUP BY (COM EXEMPLO) LEIA.

 

Se a resposta lhe for útil, não esqueça de agradescer o POST e votar positivo.

Espero ter ajudado de alguma forma

 

Att
Felipe Guedes Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimenta isso:

 

$sql2 = "SELECT EXTRACT(day FROM data) as data  FROM avaria where DAY(data) = '$datadia' AND MONTH(data) = '$datames' GROUP BY DATA";

Avise se funcionar ou não.

 

Caso não, cole aqui uma imagem da ESTRUTURA DA SUA TABELA, como essa:image.thumb.png.ec06db1218655ceaff03457c89be6b17.png

 

Para que eu possa montar para você a clausula onde você busca por DIA e MÊS e ela retorne apenas 1 registro de cada DIA e MÊS;

 

Se a resposta lhe for útil, não esqueça de agradescer o POST e votar positivo.

Espero ter ajudado de alguma forma

 

Att
Felipe Guedes Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 31/07/2019 at 23:18, Felipe Guedes Coutinho disse:

Experimenta isso:

 


$sql2 = "SELECT EXTRACT(day FROM data) as data  FROM avaria where DAY(data) = '$datadia' AND MONTH(data) = '$datames' GROUP BY DATA";

Avise se funcionar ou não.

 

Caso não, cole aqui uma imagem da ESTRUTURA DA SUA TABELA, como essa:image.thumb.png.ec06db1218655ceaff03457c89be6b17.png

 

Para que eu possa montar para você a clausula onde você busca por DIA e MÊS e ela retorne apenas 1 registro de cada DIA e MÊS;

 

Se a resposta lhe for útil, não esqueça de agradescer o POST e votar positivo.

Espero ter ajudado de alguma forma

 

Att
Felipe Guedes Coutinho

 

 

Desculpe pela demora, ja tentei o  Group BY, não funcionou.

segue a imagem da minha tabela

 

Sem título-4.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.