entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Hola Amigos tengo una duda tengo un :

$sql="SELECT  meses,año, SUM(cantidad) as cantidad  from TABLA  where usuario='$id_usuario'  GROUP BY mesese,año"

$consulta=$con->query($sql); 
   while($dato=$consulta->fetch_assoc()){
   echo $dato['año']
 echo $dato['meses']
 echo $dato['catidad']
   }

EN PANTALLA SE MUESTRA ASI:

AÑO=2015

MESES=ENERO
FEBRERO

AÑO=2014

MESES=ENERO
FEBRERO

y lo que necesito es que no repita los años

como se muestra:

2015
2015
2014     

En el select muestro tres campos uno llamado "meses" otro llamado "año" y ultimo un campo que se suma con la funcion SUM() es el campo que se suma se llama cantidad y los tengo agrupados con GROUP BY donde me los agrupa por meses y año correcto pero ala ora que quiero que no se repita un solo campo que es el año no afecta la funcion Distinct como usar correcta mente esta funcion ?

si ya realize:

$sql="SELECT  Distinct meses,año, SUM(cantidad) as cantidad  from TABLA  where usuario='$id_usuario'  GROUP BY mesese,año"

Explico lo que necesio es que no se repita el campo "año" solo ese campo unicamente sin que me afecte el campo meses.

espero me ayuden con un ejemplo SALUDOS!!

0voto

Leonardo-Tadei comentado

Los datos acumulados por ejemplo de Enero 2014 y de Enero 2015 son datos distintos, y la query está bien que los muestre.
Vos querés solo los del 2015 (año actual) ? o querés que sume todas cantidades de un mes sin importar de qué año sean?

PD: tu problema está en el armado de la query y daría lo mismo que estuvieras usando Perl, Pyton, Java o cualquier otro lenguaje.

1voto

Alan comentado

Hola amigo leonardo si mira explico el año son distintos porque lo coloca el usuario segun el año que quiera colocar el ya sea cualquier año lo que intento es que no me repita el año ya que lo que quiero es por ejemplo el usuario cloca el año 2014 y mes enero asi que nesecito que todos los meses que envie sean corespondientes a ese año y esa funcion ya la realiza el problema este: EJEMPLO:
EN PANTALLA ME IMPRIME

ASI QUIERO QUE ME IMPRIMA

2014
enero
febrero
marzo

2013
junio
octubre
diciembre

pero de lo contrario me imprime

2014
enero
2014
febrero
2014
marzo

el año con su mes y necesito que solo se imprima una vez el año se que para eso se usa una funcion llamada
Distinct pero no se como emplearla correctamente para que realize la funcion.

1 Respuesta

2votos

ignorao Puntos270

Buenas Alan

Lo que se te muestra por pantalla es correcto, ya que siempre estás imprimiendo el año correspondiente al mes que quieres mostrar. Para lo que quieres hacer es tienes varias opciones, y en todas ellas te tienes que ir guandando el ultimo año mostrado. Te pongo un ejemplo

$auxAno=array();   
while($dato=$consulta->fetch_assoc()){
       if(!in_array($dato['año'],$auxAno){
            echo $dato['año'];
            $auxAno[]=$dato['año'];
       }
       echo $dato['meses']
       echo $dato['catidad']
   }

0voto

Alan comentado

Ola ya probe tu ejemplo amigo pero aun no lo estructuro biien podrias explicarme como funciona el $auxAno=array(); o para que me sirve el array en esta ocacion ?

2votos

ignorao comentado

Buenas @Alan.

En ese array $auxAno vas almacenando todos los años que vas mostrando, y lo que haces antes de mostrarlo es comprobarlo que esté en el array, Si no lo está lo muestras.

$anosMostrados=array();   //Creo un array donde almacenar los años que voy mostrando
// Recorro con un while todas las líneas de mi query
while($dato=$consulta->fetch_assoc()){
       //Compruebo que el año de cada linea de la query no esté en el array $anosMostrados para mostrarlo
       if(!in_array($dato['año'],$anosMostrados){ //Si no lo está hago lo siguiente
            echo $dato['año']; // Muestro el año
            $anosMostrados[]=$dato['año']; // Añado el año mostrado a mi array de años mostrados
       }
       echo $dato['meses'] // Muestro el mes
       echo $dato['cantidad'] //Muestro la cantidad
   }

0voto

Alan comentado

ola amigo haha ya ok haora si te entendi voy a probar el ejemplo
gracias

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta