Ir para conteúdo

POWERED BY:

Arquivado

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

seteBR

Contar registros iguais em um DB com C.

Recommended Posts

Boa noite, possuo uma tabela no MYSQL com 6 colunas e todas essas preenchidas com valores aleatórios, o que estou tentando fazer é contar os valores iguais (semelhante ao CONT.SE no excel) presentes nas 6 colunas, dividir o resultado pela quantidade de linhas da tabela e gravar o maior valor obtido em uma outra tabela no mesmo DB. Consegui conectar e listar os dados presentes na tabela, mas não consegui contar os valores iguais. Lembrando que estou trabalhando com C e MYSQL, segue abaixo o código que estou utilizando para conectar e listar o conteudo da tabela:

 

#include <stdio.h>
#include <mysql/mysql.h>

#define HOST "localhost"
#define USER "root"
#define PASS "*****"
#define DB "trabalho"

int main(void)
{
  MYSQL conexao; 
  MYSQL_RES *resp;
  MYSQL_ROW linhas;
  MYSQL_FIELD *campos;
  char query[]="SELECT * FROM colunas;";
  int conta; //Contador comum

  mysql_init(&conexao);
  if (mysql_real_connect(&conexao,HOST,USER,PASS,DB,0,NULL,0))
  {
     printf("Conectado com Sucesso!\n");
     if (mysql_query(&conexao,query))
        printf("Erro: %s\n",mysql_error(&conexao));
     else
     {
        resp = mysql_store_result(&conexao);//recebe a consulta
       if (resp) //se houver consulta
       {
          //passa os dados dos campos para a variável campos
          //escreve na tela os nomes dos campos dando
          //um tab somente
          campos = mysql_fetch_fields(resp);
          for (conta=0;conta<mysql_num_fields(resp);conta++) {
             printf("%s",(campos[conta]).name);
             if (mysql_num_fields(resp)>1)
                 printf("\t");
             }

             printf("\n");   

             //enquanto retonrnar registros, conta até o
             //número de colunas que a tabela tem e escreve na
             //tela com um tab, depois pula a linha e tenta
             //pegar outro registro
             while ((linhas=mysql_fetch_row(resp)) != NULL)
             {
                for (conta=0;conta<mysql_num_fields(resp);conta++)
                   printf("%s\t",linhas[conta]);
                printf("\n");
             }
         }
         mysql_free_result(resp);//limpa a variável do resultado: resp
       }
       mysql_close(&conexao);
  }
  else 
  {
     printf("Conexao Falhou\n");
     if (mysql_errno(&conexao))
        printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
  }

  return 0;
}

 

Alguem sabe como fazer... se possivel poderia colocar explicações no código..

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha não cheguei rodar o código nem nada, mais o que veio na minha cabeça é usar um simples vetor para isso.

Se pular para o C++, temos o container Map.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha não cheguei rodar o código nem nada, mais o que veio na minha cabeça é usar um simples vetor para isso.

Se pular para o C++, temos o container Map.

 

[]s

Voce teria um exemplo de como ficaria o código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ficar mais simples, pode ser em C++, ou você precisa que seja em C msm?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ficar mais simples, pode ser em C++, ou você precisa que seja em C msm?

 

[]s

Pode ser em C++ sim, mas se você tiver um código em C... Mas de qualquer forma fico agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha tinha um código mais ou menos oq você qria e adaptei, por isso não compilei nem nada é só para você ter uma idéia de como q é.

Feito em C++:

#include <algorithm>
#include <iostream>
#include <map>

using namespace std;

int main(){
   int votos, i;
   map<int, int> mapa;
   map<int,int>::iterator it;
   mapa.erase (mapa.begin(), mapa.end()); //para garantir vamos zerar o mapa
   for (i = 0; i < TOTAL_REGISTROS; i++){
       scanf("%d", &numero);
       //procura alguma ocorrencia do numero, se não tiver indica que só tem um dele, se tiver acrescenta 1 no valor que já estiver
       if (mapa.find(numero) == mapa.end()) mapa[numero] = 1;
       else mapa[numero]++;
   }
   return 0;
}

 

[]s

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.