Estoy realizando un proyecto en c++ de conexion a MYSQL tengo todo lo necesario para conectarme recorrer el registro de resultados de mi consulta. El problema viene cuando quiero sacar la media de los campos numéricos y luego la mediana, lo de la mediana es ya para partirme por dos pero el AVG que debería ser lo más fácil no soy capaz de dar con ello.
Pues no sé como estipular del registro de resultados de mi consulta coja toda la columna que tiene contenido numérico la coja y haga la media. Mi primer problema es ese que no se coger todo el contenido de la columna en cuestión, ni sacar cuando tiene Integer o Double dentro.
El codigo que llevo es este:
PD. Tener en cuenta que el apartado para sacar el nombre de los campos de la tabla era por curiosidad, y que las tablas las recojo através de argumentos que le metemos.
* NaturalJoin.c*/
// Includes...
#include <string.h>
#include <iostream>
#include <windows.h>
#include <mysql/mysql.h>
#include <mysql/mysqld_error.h>
#include <cstring>
#include <cstdio>
#include <stdio.h>
using namespace std;
// Programa principal
int main(int argc, char *argv[]){
// Variables
MYSQL *myData;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *columna;
int i, j, k, l;
unsigned long *lon;
MYSQL_ROW_OFFSET pos;
int NroReg, NroColumnas;
const int MaxLongitud = 100000;
unsigned int num_fields;
if(!(myData = mysql_init(0))) {
// Imposible crear el objeto myData
cout << "ERROR: imposible crear el objeto myData." << endl;
rewind(stdin);
getchar();
return 1;
}
cout << "Hemos creado el objeto MyData";
cout << endl;
//Datos Conexion//
char Servidor[MaxLongitud] = "127.0.0.1";
char Usuario[MaxLongitud] = "alumno";
char Clave[MaxLongitud] = "alumno";
char BaseDatos[MaxLongitud] = "test";
// Fin Datos de Conexion a Base de Datos Test //
if(!mysql_real_connect(myData, Servidor, Usuario, Clave, BaseDatos, MYSQL_PORT, NULL, 0)) {
// No se puede conectar con el servidor en el puerto especificado.
cout << "Imposible conectar con servidor mysql en el puerto : " << MYSQL_PORT << endl
<< "Error: " << mysql_error(myData) << endl;
mysql_close(myData);
rewind(stdin);
cout << endl;
system("PAUSE");
return 1;
}
cout << "Hemos conectado a " << Servidor << " con el Usuario " << Usuario << " con la Clave " << Clave << " en la BaseDatos " << BaseDatos << endl;
if( mysql_select_db( myData, BaseDatos ) ){
// Imposible seleccionar la base de datos, posiblemente no existe.
cout << "ERROR: " << mysql_error(myData) << endl;
mysql_close(myData);
rewind(stdin);
cout << endl;
system("PAUSE");
return 2;
}
char CPart1[MaxLongitud] ={"SELECT * FROM "};
strcat(CPart1,argv[1]);
char CPart2[MaxLongitud] ={" NATURAL JOIN "};
strcat(CPart2,argv[2]);
strcat(CPart1,CPart2);
if( mysql_query( myData, CPart1)){
// Error al realizar la consulta:
cout << "ERROR: " << mysql_error(myData) << endl;
mysql_close(myData);
rewind(stdin);
cout << endl;
system("PAUSE");
return 2;
}
cout << endl << CPart1 << endl;
// Almacenar el resultado de la consulta:
if((res = mysql_store_result(myData))) {
// Obtener el número de registros seleccionados:
NroReg = (int) mysql_num_rows(res);
// Obtener el número de columnas por fila:
NroColumnas = (int) mysql_num_fields(res);
cout << endl;
}
int NumIntermedios, Media;
NumIntermedios = 0;
for(j = 0 ; j < NroColumnas ; j++) {
columna = mysql_fetch_fields(res);
cout << "Campos Tabla: " << columna[j].name << endl;
}
for(i = 1; i < NroReg; i++) {
row = mysql_fetch_row(res);
lon = mysql_fetch_lengths(res);
}
}
}
// Leer registro a registro y mostrar:
cout << endl;
mysql_free_result(res);
mysql_close(myData);
rewind(stdin);
cout << endl;
system("PAUSE");
}