Foros del Web » Programando para Internet » PHP »

PHP OO Hola, tengo el siguiente problema para resolver en php

Estas en el tema de Hola, tengo el siguiente problema para resolver en php en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema para resolver en php, tengo la siguiente lista de horarios: 823 seria el id de usuario 823 - 08:47 - ...
  #1 (permalink)  
Antiguo 28/04/2013, 18:16
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Hola, tengo el siguiente problema para resolver en php

Hola, tengo el siguiente problema para resolver en php, tengo la siguiente lista de horarios:

823 seria el id de usuario

823 - 08:47 - Ingreso Empresa
823 - 09:00 - Ingreso al SIT
823 - 09:01 - Ingreso de Campaña
823 - 09:05 - Egreso de Campaña
823 - 09:05 - Ingreso de Campaña
823 - 09:08 - Egreso de Campaña
823 - 09:08 - Ingreso de Campaña
823 - 09:09 - Egreso de Campaña
823 - 09:09 - Ingreso de Campaña
823 - 09:10 - Egreso de Campaña
823 - 09:10 - Ingreso de Campaña
823 - 09:12 - Egreso de Campaña
823 - 09:12 - Ingreso de Campaña
823 - 09:13 - Egreso de Campaña
823 - 09:13 - Ingreso de Campaña
823 - 09:13 - Egreso de Campaña
823 - 09:13 - Ingreso de Campaña
823 - 09:15 - Egreso de Campaña
823 - 09:15 - Ingreso de Campaña
823 - 09:15 - Egreso de Campaña
823 - 09:15 - Ingreso de Campaña
823 - 09:16 - Egreso de Campaña
823 - 09:16 - Ingreso de Campaña
823 - 09:21 - Egreso de Campaña
823 - 09:21 - Ingreso de Campaña
823 - 09:24 - Egreso de Campaña
823 - 10:04 - Ingreso de Campaña
823 - 10:19 - Inicio Break - Baño
823 - 10:25 - Fin Break
823 - 10:29 - Egreso de Campaña
823 - 10:29 - Ingreso de Campaña
823 - 10:34 - Egreso de Campaña
823 - 10:34 - Ingreso de Campaña
823 - 10:36 - Egreso de Campaña
823 - 10:36 - Ingreso de Campaña
823 - 10:39 - Egreso de Campaña
823 - 10:39 - Ingreso de Campaña
823 - 10:41 - Egreso de Campaña
823 - 10:41 - Ingreso de Campaña
823 - 10:42 - Egreso de Campaña
823 - 10:42 - Ingreso de Campaña
823 - 10:43 - Egreso de Campaña
823 - 10:57 - Ingreso de Campaña
823 - 11:02 - Inicio Break - Cierre de Venta
823 - 11:04 - Fin Break
823 - 11:10 - Egreso de Campaña
823 - 11:10 - Ingreso de Campaña
823 - 11:13 - Egreso de Campaña
823 - 11:13 - Ingreso de Campaña
823 - 11:15 - Egreso de Campaña
823 - 11:15 - Ingreso de Campaña
823 - 11:16 - Egreso de Campaña
823 - 11:16 - Ingreso de Campaña
823 - 11:23 - Inicio Break - Cierre de Venta
823 - 11:25 - Fin Break
823 - 11:31 - Inicio Break - Cierre de Venta
823 - 11:33 - Fin Break
823 - 11:35 - Egreso de Campaña
823 - 11:35 - Ingreso de Campaña
823 - 11:42 - Inicio Break - Cierre de Venta
823 - 11:43 - Fin Break
823 - 11:45 - Egreso de Campaña
823 - 11:45 - Ingreso de Campaña
823 - 11:48 - Egreso de Campaña
823 - 11:48 - Ingreso de Campaña
823 - 11:50 - Egreso de Campaña
823 - 11:50 - Ingreso de Campaña
823 - 11:52 - Egreso de Campaña
823 - 11:52 - Ingreso de Campaña
823 - 11:54 - Egreso de Campaña
823 - 11:54 - Ingreso de Campaña
823 - 11:54 - Egreso de Campaña
823 - 12:18 - Ingreso de Campaña
823 - 12:28 - Inicio Break - Cierre de Venta
823 - 12:30 - Fin Break
823 - 12:32 - Egreso de Campaña
823 - 12:32 - Ingreso de Campaña
823 - 12:32 - Egreso de Campaña
823 - 12:32 - Ingreso de Campaña
823 - 12:34 - Egreso de Campaña
823 - 12:34 - Ingreso de Campaña
823 - 12:36 - Egreso de Campaña
823 - 12:36 - Ingreso de Campaña
823 - 12:37 - Egreso de Campaña
823 - 12:37 - Ingreso de Campaña
823 - 12:39 - Egreso de Campaña
823 - 12:39 - Ingreso de Campaña
823 - 12:40 - Egreso de Campaña
823 - 12:40 - Ingreso de Campaña
823 - 12:45 - Egreso de Campaña
823 - 12:45 - Ingreso de Campaña
823 - 12:46 - Egreso de Campaña
823 - 12:46 - Ingreso de Campaña
823 - 12:46 - Egreso de Campaña
823 - 12:46 - Ingreso de Campaña
823 - 12:48 - Egreso de Campaña
823 - 15:04 - Egreso del SIT
823 - 15:06 - Egreso Empresa

Y necesito q de esa lista obtener lo siguiente

823 - 08:47 - Ingreso Empresa
823 - 09:00 - Ingreso al SIT
823 - 09:01 - Ingreso de Campaña
823 - 09:24 - Egreso de Campaña
823 - 10:19 - Inicio Break - Baño
823 - 10:25 - Fin Break
823 - 10:29 - Ingreso de Campaña
823 - 10:43 - Egreso de Campaña
823 - 11:02 - Inicio Break - Cierre de Venta
823 - 11:04 - Fin Break
823 - 11:10 - Ingreso de Campaña
823 - 11:16 - Egreso de Campaña
823 - 11:23 - Inicio Break - Cierre de Venta
823 - 11:25 - Fin Break
823 - 11:45 - Ingreso de Campaña
823 - 11:54 - Egreso de Campaña
823 - 12:28 - Inicio Break - Cierre de Venta
823 - 12:30 - Fin Break
823 - 12:32 - Ingreso de Campaña
823 - 12:48 - Egreso de Campaña
823 - 15:04 - Egreso del SIT
823 - 15:06 - Egreso Empresa

Es decir agrupar los ingresos y egresos a campaña para q no me quede repetido tantas veces, y obtener el primer ingreso campaña y ultimo egreso de dicho bloque como esta en la lista q resumi.

Espero me puedan dar una mano con esto, desde ya muchas gracias.
  #2 (permalink)  
Antiguo 28/04/2013, 18:30
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años, 6 meses
Puntos: 50
Respuesta: Hola, tengo el siguiente problema para resolver en php

mm creo que el problema es con la consulta ... si le entendi bien la solucion puede ser esto:

// para que no le repita valores.

select distinct dato1, dato2, dato3 from tabla;

// para mostrar el primero y el ultimo:

select campos from tabla order by campo hora ASC limit 1;

select campos from tabla order by campo hora DESC limit 1;
  #3 (permalink)  
Antiguo 28/04/2013, 19:00
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Hola, tengo el siguiente problema para resolver en php

El tema es q con distinct me traeria solo 1 vez cada evento, osea me traeria solo 1 ingreso campaña , solo un egreso campaña, y tengo q mostrarlo en bloques, osea si tengo

823 - 09:01 - Ingreso de Campaña
823 - 09:05 - Egreso de Campaña
823 - 09:05 - Ingreso de Campaña
823 - 09:08 - Egreso de Campaña
823 - 09:08 - Ingreso de Campaña
823 - 09:09 - Egreso de Campaña
823 - 09:09 - Ingreso de Campaña
823 - 09:10 - Egreso de Campaña

tengo q agruparlo de tal forma q solo me tome el primer ingreso y el ultimo egreso para q quede asi

823 - 09:01 - Ingreso de Campaña
823 - 09:10 - Egreso de Campaña

sin mostrar los q figuran entremedio se entiende?

si te fijas tamb tengo break entre medio de cada ingreso y egreso campaña, y continua con ingreso y egreso campaña.
  #4 (permalink)  
Antiguo 28/04/2013, 19:25
 
Fecha de Ingreso: abril-2013
Mensajes: 23
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Hola, tengo el siguiente problema para resolver en php

Me parece que debido a la estructura de la tabla y como se ingresan los valores, lo tenes que resolver por programación (quizas hay alguna forma en SQL que se me escape por lo pronto). Creo que podrias plantear algo como sigue:

Código PHP:
$query "SELECT id, hora, evento FROM Eventos WHERE id = 823";
$resultados mysql_query($query,$conex);
$arrayaux = array();
            
            for(
$i 0$row mysql_fetch_row($resultados);$i++){
                    
$banderafin=0;
                    switch (
$row['evento']){
                        case 
'Ingreso Empresa':
                        
$arrayaux[]=$row['id'];
                        
$arrayaux[]=$row['hora'];
                        
$arrayaux[]=$row['evento'];
                        
$banderafin 0;
                        break;
                        
                        case 
'Ingreso al SIT':
                        
$arrayaux[]=$row['id'];
                        
$arrayaux[]=$row['hora'];
                        
$arrayaux[]=$row['evento'];
                        
$banderafin 0;
                        break;
                        
                        case 
'Ingreso de Campaña':
                        if(
$banderafin 0){
                            
$arrayaux[]=$row['id'];
                            
$arrayaux[]=$row['hora'];
                            
$arrayaux[]=$row['evento'];
                            break;
                        }
                        else{
                            break;
                        }
                        
                        case 
'Egreso de Campaña':
                        if(
$banderafin 1){
                            for(
$j=0;$j<$arrayaux.length;$j++){
                                if(
$arrayaux[$j] == 'Egreso de Campaña'){
                                    
$pos_id=$j;
                                    
$pos_hora=$j-1;
                                    
$pos_evento=$j-2;
                                }
                            }
                            
$arrayaux[$pos_id]=$row['id'];
                            
$arrayaux[$pos_hora]=$row['hora'];
                            
$arrayaux[$pos_evento]=$row['evento'];
                            break;
                        }
                        else{
                            
$arrayaux[]=$row['id'];
                            
$arrayaux[]=$row['hora'];
                            
$arrayaux[]=$row['evento'];
                            
$banderafin=1;
                        }
                        break;
                        
                        case 
'Inicio Break - Baño':
                        
$arrayaux[]=$row['id'];
                        
$arrayaux[]=$row['hora'];
                        
$arrayaux[]=$row['evento'];
                        
$banderafin 0;
                        break;                        
                        
//Resto de la lógica
                    
}
            } 
Sería basicamente, crear un array que almacene los eventos (con sus 3 datos) de acuerdo a cierta lógica que plantearias al recorrer los resultados a través de un switch. Como no conozco mucho las alternativas que se te pueden presentar, plantee lo siguiente:

1) Si llega un evento de ingreso a campaña y la bandera está en 0, registro los datos.
2) Si llega un evento de ingreso a campaña y la bandera está en 1, no registro los datos (dado que hubo anteriormente un evento de egreso de campaña).
3) Cuando se produce un evento de egreso y la variable bandera está en 0, registramos los datos y ponemos la bandera en 1. (Esta bandera se resetearía a 0 en cualquier otro evento que te "corte" el bloque. Por ej: Inicio break)
4) Cuando se produce un evento de egreso de campaña y la bandera está en 1, recorrés el array que estás creando y registras el último evento de egreso de campaña y guardas las posiciones de los 3 datos.

Espero haber sido más o menos claro. De todos modos deberías completar el resto de la lógica para que el array sea integro y guarde los datos como los necesitás.

Saludos!

Etiquetas: resolver, siguiente
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 08:15.