Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Obtener CEROS (0) para evitar los NULLS

Estas en el tema de Obtener CEROS (0) para evitar los NULLS en el foro de Mysql en Foros del Web. Buenas tardes amigos tengo una pequeña duda y necesito resolverla. Veran estoy haciendo unas graficas en un sistema en php y los datos los obtengo ...
  #1 (permalink)  
Antiguo 07/02/2013, 11:36
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 4 meses
Puntos: 19
Obtener CEROS (0) para evitar los NULLS

Buenas tardes amigos tengo una pequeña duda y necesito resolverla.

Veran estoy haciendo unas graficas en un sistema en php y los datos los obtengo en una bd, pero necesito que en el momento que yo ejecute la consulta si uno o todos los valores son NULL me devuelva 0, para que la grafica pueda mostrarse...

la consulta la tengo asi:

Código MySQL:
Ver original
  1.         IFNULL(MONTH(fec_reg),'0') as mes,
  2.         IFNULL(YEAR(fec_reg),'0') as ano,
  3.         IFNULL(fact,'0') as fact,
  4.         IFNULL(dev,'0') as dev,
  5.         IFNULL(facturado,'0') as mfact,
  6.         IFNULL(devolucion,'0') as mdev,
  7.         IFNULL(((facturado-devolucion)/fact),'0') as ticpro,
  8.         IFNULL(((devolucion/facturado)*100),'0') as cdtien,
  9.         IFNULL((SELECT AVG((devolucion/facturado)*100) FROM `indicadores_numeros` WHERE MONTH(fec_reg) = '12' AND YEAR(fec_reg) = '2012'),'0') as cdpro
  10.         FROM `indicadores_numeros` WHERE MONTH(fec_reg) = '12' AND YEAR(fec_reg) = '2012' AND id_franquicia = '8'

y me devuelve: MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas)

Lo cual es cierto porque no hay datos, pero como necesito mostrar las graficas (asi estas sean 0) necesito que me devuelva 0 las consultas, como lo hago?
  #2 (permalink)  
Antiguo 08/02/2013, 06:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener CEROS (0) para evitar los NULLS

Cita:
y me devuelve: MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas)


Es decir cero registros (no cero columnas) si no hay registros obviamente tampoco hay columnas pero en este caso es antes el huevo que las gallinas... Si no hubiera columnas el resultado seria un error de sintaxis no un conjunto vacio de datos.

Si no hay registros no hay nada, ni nulos... IFNULL() es una buena solución siempre que haya algo sobre lo que aplicarla.

No veo otra solución que por programación externa si recibes cero REGISTROS crees un registro con ceros de forma "artificial". No explicas conque estas trabajando pero seguramente lo que hace es pasar los datos a una estructura de memoria, por ejemplo un array, para luego tratarlos, por artificial quiero decir que en ese supuesto array crees un elemento con ceros... así no vas a ensuciar la bbdd, la alternativa seria entrar un registro falso en la bbdd...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/02/2013 a las 07:17
  #3 (permalink)  
Antiguo 08/02/2013, 09:07
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 4 meses
Puntos: 19
Respuesta: Obtener CEROS (0) para evitar los NULLS

Estoy usando PHP para manejar los datos lo que hice fue asi:

Código PHP:
Ver original
  1. $sqlfe="SELECT
  2.         MONTH(fec_reg) as mes,
  3.         YEAR(fec_reg) as ano,
  4.         fact as fact,
  5.         dev as dev,
  6.         facturado as mfact,
  7.         devolucion as mdev,
  8.         (facturado-devolucion)/fact as ticpro,
  9.         (devolucion/facturado)*100 as cdtien,
  10.         (SELECT AVG((devolucion/facturado)*100) FROM `indicadores_numeros` WHERE MONTH(fec_reg) = '".$mesa."' AND YEAR(fec_reg) = '".$anoa."') as cdpro
  11.         FROM `indicadores_numeros` WHERE MONTH(fec_reg) = '".$mesa."' AND YEAR(fec_reg) = '".$anoa."' AND id_franquicia = '".$fr."'";
  12. $rfe = mysql_query($sqlfe) or die (mysql_error());
  13. $rowfe = mysql_fetch_assoc($rfe);
  14. if (!$rowfe)
  15. {
  16.     $mesactual=$mesa;
  17.     $anoactual=$anoa;
  18.     $fecha_actual=cual_mes($mesactual)." ".$anoactual;
  19.     $ticketpro=round(0,2);
  20.     $numfact=round(0,2);
  21.     $numdev=round(0,2);
  22.     $montfact=round(0,2);
  23.     $montodev=round(0,2);
  24.     $coefdevtien=round(0,2);
  25.     $coefdevpro=round(0,2);
  26. }
  27. else
  28. {
  29.     $mesactual=$rowfe['mes'];
  30.     $anoactual=$rowfe['ano'];
  31.     $fecha_actual=cual_mes($mesactual)." ".$anoactual;
  32.     $ticketpro=round($rowfe['ticpro'],2);
  33.     $numfact=round($rowfe['fact'],2);
  34.     $numdev=round($rowfe['dev'],2);
  35.     $montfact=round($rowfe['mfact'],2);
  36.     $montodev=round($rowfe['mdev'],2);
  37.     $coefdevtien=round($rowfe['cdtien'],2);
  38.     $coefdevpro=round($rowfe['cdpro'],2);
  39. }

ya que como te dije hay franquicias que no llenan los datos y necesito que en vez de arrojar el error de NULL me tome 0 y dibuje la grafica (la grafica es jquery y si recibe un dato NUL no la dibuja), con esto que hice resolvi el problema... al menos que exista una mejor manera de hacerlo...
  #4 (permalink)  
Antiguo 08/02/2013, 12:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener CEROS (0) para evitar los NULLS

Es exactamente lo que te sugeria... no con un array sino con variables sueltas... deberías mantener los ifnull por si hay algun campo nulo....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: php, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:22.