Foros del Web » Programando para Internet » PHP »

Problema/Duda/Ayuda... con este codigo

Estas en el tema de Problema/Duda/Ayuda... con este codigo en el foro de PHP en Foros del Web. wenas, Tengo este codigo: Código PHP: $sql = "SELECT tendes,fecha,Count(numero) AS clients,Sum(total) AS total  FROM tendes,tickets  WHERE id_tenda = tienda AND fecha='" . $data_passada . "' GROUP BY tendes,fecha ORDER BY id_tenda" ; $res = mysql_query ( $sql ); $numeroRegistros ...
  #1 (permalink)  
Antiguo 09/03/2005, 01:58
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta Problema/Duda/Ayuda... con este codigo

wenas,
Tengo este codigo:
Código PHP:
$sql="SELECT tendes,fecha,Count(numero) AS clients,Sum(total) AS total 
FROM tendes,tickets 
WHERE id_tenda = tienda AND fecha='"
.$data_passada."'
GROUP BY tendes,fecha
ORDER BY id_tenda"
;
$res=mysql_query($sql);
$numeroRegistros=mysql_num_rows($res);
if(
$numeroRegistros<=0){
    echo 
"<div align='center'>";
    echo 
"<font face='verdana' size='-2'>No hay resultados</font>";
    echo 
"</div>";
}else{         
    
$data = array(); 
    while(
$row mysql_fetch_row($res))
        { 
        
$data[] = array($row[0],$row[2]); 
        }    

lo q hace este codigo es q del resultado de una consulta me llena una array (la consulta me da la facturacion de un dia de una tienda), q a la vez este se lo paso a una funcion para q me genere un grafico lineal.
La duda q tengo es q el grafico tiene q ser un comparativo de la facturacion de las tiendas y no ser como separar los datos de este año con el anterior.
Si meto las dos fechas en la consulta los resultados me los junta todos ya q selecciono por columnas.
$data[] = array($row[0],$row[2]);
--> row[0]: son las tiendas
--> row[2]:num de clientes de la fecha dada

Si pusiera un row mas este me pasaria los datos del segundo grafico y asi sucesivamente. cada Row son los puntos q le paso para q me genere el grafico.
No ser si me explicado bien y perdonar por el msg tant largo!
Gracias de antemano!

Última edición por sergi_climent; 09/03/2005 a las 02:18
  #2 (permalink)  
Antiguo 09/03/2005, 02:27
 
Fecha de Ingreso: diciembre-2004
Mensajes: 120
Antigüedad: 19 años, 4 meses
Puntos: 0
Igual no te he entendido bien, pero ¿no te bastaría con hacer dos consultas, una para cada año?
  #3 (permalink)  
Antiguo 09/03/2005, 05:35
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
es lo q he intentado, pero como le paso el valor de la otra consulta al array q estoy creando?
  #4 (permalink)  
Antiguo 09/03/2005, 11:34
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta

Alguna ayuda/idea...solucion ?
  #5 (permalink)  
Antiguo 09/03/2005, 11:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
disculpame pero la verdad no se entiende muy bien que es lo que queres. Tal ves algun ejemplito o algo que ayude a delusidar tu problema.
Saludos
  #6 (permalink)  
Antiguo 10/03/2005, 01:16
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta

a ver,
tengo una consulta q me muestra la facturacion de unas tiendas. El usuario escoje una fecha y con esta se muestra un comprativo de la fecha escojida por el usuario y la misma en el año pasado. El resultado lo muestro en dos tablas distintas cada una con su respectiva consulta. El problema lo tengo al generar el grafico q lo tengo q mostrar todo en uno. es decir tengo q mostrar la facturacion de cada tienda con la fecha q ha introducido el usuario y la misma fecha pero del año pasado.
Utilizo un generador de graficos q se llama phplot, y a este hay q pasarle los puntos para q las funciones generen el grafico.
Entonces mi problema lo tengo en este cacho de codigo:

Código PHP:
$sql="SELECT tendes,fecha,Count(numero) AS clients,Sum(total) AS total 
FROM tendes,tickets 
WHERE id_tenda = tienda AND fecha='"
.$data_passada."' 
GROUP BY tendes,fecha 
ORDER BY id_tenda"

$res=mysql_query($sql); 
$numeroRegistros=mysql_num_rows($res); 
if(
$numeroRegistros<=0){ 
    echo 
"<div align='center'>"
    echo 
"<font face='verdana' size='-2'>No hay resultados</font>"
    echo 
"</div>"
}else{          
    
$data = array(); 
    while(
$row mysql_fetch_row($res)) 
        { 
        
$data[] = array($row[0],$row[2]); 
        }     

aqui es donde creo el array.
Código PHP:
while($row mysql_fetch_row($res)) 
        { 
        
$data[] = array($row[0],$row[2]); 
        } 
Donde pone row[0] es el eje X en el qula muestro los nombres de ls diferentes tiendas. Entonces el Row[2] son los puntos q le paso al grafico y asi me genera la grafica linial. Pero para hacer lo q yo quiero necesito meter un Row[] mas. q seria el segundo grafico. el ultimo row tendria q ser el resultado de otra consulta.
Espero q me hay explicado mejor!
Alguna diea? acepto cualquier tipo de sugerencia....
Gracias!

Última edición por sergi_climent; 10/03/2005 a las 03:13
  #7 (permalink)  
Antiguo 10/03/2005, 06:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
Bien, por un lado tenes que hacer otra consulta para saber los datos del año anterior que no es mas que la consulta que haces con otra fecha.Por otro lado habria que ver la especificacion de ese graficador. Podrias probar con algo asi:

Código PHP:
$sql="SELECT tendes,fecha,Count(numero) AS clients,Sum(total) AS total 
FROM tendes,tickets 
WHERE id_tenda = tienda AND fecha='"
.$data_passada."' 
GROUP BY tendes,fecha 
ORDER BY id_tenda"

$res=mysql_query($sql); 

$sql="SELECT tendes,fecha,Count(numero) AS clients,Sum(total) AS total 
FROM tendes,tickets 
WHERE id_tenda = tienda AND fecha='"
.$laotrafecha."' 
GROUP BY tendes,fecha 
ORDER BY id_tenda"

$res2=mysql_query($sql); 

$numeroRegistros=mysql_num_rows($res); 
if(
$numeroRegistros<=0){ 
    echo 
"<div align='center'>"
    echo 
"<font face='verdana' size='-2'>No hay resultados</font>"
    echo 
"</div>"
}else{           
    
$data = array(); 
    while(
$row mysql_fetch_row($res)) { 
        
    while(
$row2 mysql_fetch_row($res2))
        if(
$row2[0]==$row[0]){
            
$dato $row2[2];
            break;
        }
    if(!
mysql_fetch_row($res2))//Por las dudas de que no haya registro del año anterior
        
$dato=0;
        
$data[] = array($row[0],$row[2],$dato); 
    }      

Espero que sea algo asi lo que necesitas. No es lo mas eficiente que se puede pero es una solucion rapida.
Saludos
  #8 (permalink)  
Antiguo 10/03/2005, 09:10
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Pregunta

Muchas gracias por tu rapida respuesta.
No me da ningun error, pero al mostrar el segundo grafico solo me muestra el primer registro. los demas me los pone a cero. He estado probando pero no consigo salirme con la mia...
Se te ocurre cual puede ser el problema?
  #9 (permalink)  
Antiguo 10/03/2005, 09:19
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
el problema debe ser que no los estas asignado a una posicion, hace una cosa proba esto:
array_push($data ,array($row[0],$row[2],$dato));

Contame si te anduvo.
Suerte
  #10 (permalink)  
Antiguo 10/03/2005, 10:05
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
no estoy seguro pero diria q es esto:
if(!mysql_fetch_row($res2))//Por las dudas de que no haya registro del año anterior
$dato=0;
si lo dejo comentado me muestra bien los datos, el problema esta como muy bien has dicho q si no hay datos del año pasado me da error.
  #11 (permalink)  
Antiguo 10/03/2005, 10:10
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
podrias evitar eso poniendo un flag de control.Una variable que la seteas a 1 si encontro valor o a 0 si no, y efectuar una accion dependiendo de este flag, para que no te falte un valor del año anterior.
Te parece?
Saludos
  #12 (permalink)  
Antiguo 10/03/2005, 10:15
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
perdona mi poco conocimiento, pero hace poco q me iniciado en php y voy aun poco perdido...
un flag de control te refieres a una simple variable booleana? donde si es 0 q me mande todos los datos y si es 1 q solo muestre el año actual...?
  #13 (permalink)  
Antiguo 10/03/2005, 10:33
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
El codigo q tengo actualmente:

Código PHP:
//Definim objecte
$graph = new PHPlot(600,400);

//Definim els Titols
$graph->SetTitle("La Panera del Pa\n\rGrafica");
$graph->SetXTitle('Tendes');
$graph->SetYTitle('Facturacio');

     
$sql="SELECT tendes,fecha,Sum(total) AS total 
            FROM tendes,tickets 
            WHERE id_tenda = tienda AND fecha='"
.$data_usuari."' 
            GROUP BY tendes,fecha 
            ORDER BY id_tenda"

    
$res=mysql_query($sql); 

    
$sql="SELECT tendes,fecha,Sum(total) AS total 
            FROM tendes,tickets 
            WHERE id_tenda = tienda AND fecha='"
.$data_passada."' 
            GROUP BY tendes,fecha 
            ORDER BY id_tenda"

    
$res2=mysql_query($sql); 
$numeroRegistros=mysql_num_rows($res); 
if(
$numeroRegistros<=0){ 
    echo 
"<div align='center'>"
    echo 
"<font face='verdana' size='-2'>No s'han trobat resultats</font>"
    echo 
"</div>"
}
else
{  
    
$data = array();
    while(
$row mysql_fetch_row($res))
    {          
        while(
$row2 mysql_fetch_row($res2)) 
            if(
$row2[0]==$row[0])
            { 
                
$dato $row2[2]; 
                break; 
            } 
            if(!
mysql_fetch_row($res2))//Por las dudas de que no haya registro del año anterior 
            
{
                
$dato=0;    
            }    
            
$data[] = array($row[0],$row[2],$dato); 
    }
            
          

$graph->SetDataValues($data);
//Llegenda
$graph->SetLegend("clients");
$graph->SetLegendPixels(500,25);
//Dibuixem la gràfica
$graph->DrawGraph(); 
el problema lo es al poner dato, solo me coje la primera tienda... las demas me pasa todas 0.
Sabes porque puede ser?

Por cierto muchas gracias, llevo 1 par de dias con esto y al final decidi por la via facil q es preguntar si alguien lo sabe...
  #14 (permalink)  
Antiguo 10/03/2005, 10:52
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
ya encontre la manera de hacerlo.
aqui dejo el codigo posteado
Código PHP:
//Include codi phplot
include('./phplot.php');

//Definim objecte
$graph = new PHPlot(600,400);

//Definim els Titols
$graph->SetTitle("La Panera del Pa\n\rComparatiu Diari");
$graph->SetXTitle('Tendes');
$graph->SetYTitle('Facturacio');

     
$sql="SELECT tendes,fecha,Sum(total) AS total 
            FROM tendes,tickets 
            WHERE id_tenda = tienda AND fecha='"
.$data_usuari."' 
            GROUP BY tendes,fecha 
            ORDER BY id_tenda"

    
$res=mysql_query($sql); 

    
$sql="SELECT tendes,fecha,Sum(total) AS total 
            FROM tendes,tickets 
            WHERE id_tenda = tienda AND fecha='"
.$data_passada."' 
            GROUP BY tendes,fecha 
            ORDER BY id_tenda"

    
$res2=mysql_query($sql); 
$numeroRegistros=mysql_num_rows($res); 
$numeroRegistros2=mysql_num_rows($res2); 
if(
$numeroRegistros<=0)

    echo 
"<div align='center'>"
    echo 
"<font face='verdana' size='-2'>No s'han trobat resultats</font>"
    echo 
"</div>"
}
elseif (
$numeroRegistros2<=0)
{  
       
        
$data = array(); 
        while(
$row mysql_fetch_row($res)) 
            { 
                
$data[] = array($row[0],$row[2]); 
            }
}
else
{    
    
$data = array();
    while(
$row mysql_fetch_row($res))
    {          
        while(
$row2 mysql_fetch_row($res2)) 
            if(
$row2[0]==$row[0])
            { 
                
$dato $row2[2]; 
                break; 
            } 
            
$data[] = array($row[0],$row[2],$dato); 
    }    
          

$graph->SetDataValues($data); 
Ante todo muxisimas gracias MartinTandil por ayudarme.
Saludos
  #15 (permalink)  
Antiguo 10/03/2005, 10:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
Aca te mando unos cambios. El error que ponia todos a cero es porque no dirigiamos el puntero del resultset al registro 0, entonces se quedaba en el final.
Te agregue lo del flag, y si es una simple variable.

Código PHP:
    while($row mysql_fetch_row($res)) 
    {      
    
mysql_data_seek($res2,0
    
$flag=0;     
        while(
$row2 mysql_fetch_row($res2)) 
            if(
$row2[0]==$row[0]){ 
                
$dato $row2[2]; 
        
$flag=1;
                break; 
            } 
       if(
$flag==0){//Por las dudas de que no haya registro del año anterior 
            
$dato=0;     
       }     
       
$data[] = array($row[0],$row[2],$dato); 
    } 
Espero que esta ves te ande.
Saludos
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 10:24.