PHP - Tiempos de Carga PHP

   
Vista:

Tiempos de Carga PHP

Publicado por Angel (41 intervenciones) el 15/09/2014 22:13:27
Que tal, tengo una aplicación que saca ventas en un rango de fechas dependiendo el proveedor que realice el login al sistema.

Ya depende del proveedor cuantas filas tenga de resultado la consulta, pero lo raro aqui es que cuando se selecciona un rango de 2 dias como maximo, ejemplo '2014-08-01 a '2014-08-03' los resultados los arroja sin problemas, ahi ya depende si arroja 14 mil registros o 200 registros nada mas, pero al meter un rango mas alto como hasta el dia 04 se traba totalmente.

De 213 registros de un proveedor que es del rango 01 a 03 y al 04 aumenta a 237 y se traba, que puede estar pasando??

Así que por lo que veo no importa el numero de registros, tengo otro que del 01 al 03 son 14697, osea que no deberia de trabarse con los 237 registros del otro proveedor. No se que pasa la verdad.

Con cualquier proveedor se traba si se pone un rango de 3 dias, por ejemplo 01 al 04.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Tiempos de Carga PHP

Publicado por Gonzalo (338 intervenciones) el 15/09/2014 22:46:23
es mssql, mysql o access? solo mandas pedir ese query? es un server o una pc? pasa lo mismo si corres el query desde el interprete de sql? puedes incluir un ejemplo del query? el query lo corres local? o remoto?

salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Angel (41 intervenciones) el 16/09/2014 00:04:42
Esta combinado con mysql. Esta montado en un servidor virtual de linux. Si lo corro desde del SQL yog todo bien, inclusive si entro al cpanel abro el phpmyadmin y lo ejecuto no tarda nada.

Aqui esta el query:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
function getVentas($parametros){
		global $db;
		$proveedor   =	$parametros['proveedor'];
		$descripcion =	$parametros['descripcion'];
		$fechade     =	$parametros['fechade'];
		$fechaa      =	$parametros['fechaa'];
		$sucursal    =	$parametros['sucursal'];
		$codigo      =	$parametros['codigo'];
		$cantidadde  =	$parametros['cantidadde'];
		$cantidada   =	$parametros['cantidada'];
		$importede   =	$parametros['importede'];
		$importea    =	$parametros['importea'];
		$tecla       =	$parametros['tecla'];
 
		$fecha = explode('-', $fechade);
		$fecha1 = $fecha[2].'-'.$fecha[1].'-'.$fecha[0];
 
		$fecha = explode('-', $fechaa);
		$fecha2 = $fecha[2].'-'.$fecha[1].'-'.$fecha[0];
 
 
		if(!empty($descripcion)){
			$where1 .=" AND a.nombre LIKE '%$descripcion%'";
		}
		if(!empty($codigo)){
			$where1 .=" AND a.codigo = $codigo";
		}
		if(!empty($tecla)){
			$where1 .=" AND a.tecla = $tecla";
		}
 
 
		if($sucursal != 0){
			$where .=" AND v.sucursal = $sucursal";
		}
		if($cantidadde!='') {
			if($cantidada!='') {
				$having =" HAVING SUM(Cantidad) BETWEEN '$cantidadde' AND '$cantidada' ";
			} else {
				$having =" HAVING SUM(Cantidad)>='$cantidada' ";
			}
		} elseif($cantidadde!='') {
			$having =" HAVING SUM(Cantidad)<='$cantidada' ";
		}
 
		if($importede!='') {
			if($importea!='') {
				if(empty($having)){
					$having .= " HAVING SUM(Venta*Cantidad) BETWEEN $importede AND $importea ";
				} else {  $having .= " AND SUM(Venta*Cantidad) BETWEEN $importede AND $importea ";
			}
			} else {
				if(empty($having)){
					$having .= " HAVING SUM(Venta*Cantidad)>=$importede ";
				} else {
					$having .= " AND SUM(Venta*Cantidad)>=$importede ";
				}
			}
		} elseif($importea!='') {
			if(empty($having)){
				$having .=" HAVING SUM(Venta*Cantidad)<=$importea ";
			} else {
				$having .= " AND SUM(Venta*Cantidad)>=$importede ";
			}
		}
		$query1 ="	CREATE TEMPORARY TABLE paso
					SELECT 	ap.proveedor,ap.articulo,a.nombre,a.tecla,a.codigo
					FROM 	arti_proveedor ap
							INNER JOIN articulo a ON ap.articulo=a.articulo
					WHERE 	ap.proveedor=$proveedor
					".$where1."
				";
		$db->query($query1);
 
		$query2 =" SELECT 	v.sucursal, v.articulo,p.nombre,p.tecla,p.codigo,s.descripcion,
							ROUND(SUM(Cantidad),2) AS cantidad,
							ROUND(SUM(Venta*Cantidad)/SUM(Cantidad),2) AS venta,
							ROUND(SUM(Venta*Cantidad),2) AS importe,
							ROUND(SUM(MaVenta*MaCantidad)/SUM(MaCantidad),2) AS MaVenta,
							ROUND(SUM(MaCantidad),2) AS MaCantidad,
							ROUND(SUM(MaVenta*MaCantidad),2) AS MaImporte,
							ROUND(SUM(AaVenta*AaCantidad)/SUM(AaCantidad),2) AS AaVenta,
							ROUND(SUM(AaVenta*AaCantidad),2) AS AaImporte,
							ROUND(SUM(AaCantidad),2) AS AaCantidad
				  FROM 		ventas v
							INNER JOIN paso p ON v.articulo=p.articulo
							INNER JOIN sucursal s ON v.sucursal=s.sucursal
				  WHERE 	fecha_transmision BETWEEN '$fecha1' AND '$fecha2' AND p.proveedor=$proveedor
				  			AND v.sucursal NOT IN(95,96)
				  			".$where."
							GROUP BY v.sucursal,v.articulo
							".$having."
						 ";
 
		$respuesta = $db->get_results($query2);
		$query3 = "DROP TABLE paso";
		$db->query($query3);
		return json_encode($respuesta);
	}

Como puedes ver gonzali, la creacion de la tabla temporal mete datos del proveedor que realizo el login al sistema, y cuando se hace el $query2 se hace un join a esta tabla para filtrar solo esos articulos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Gonzalo (338 intervenciones) el 16/09/2014 00:59:55
no se ve nada raro exepto por detalles que podrian no ser presisamente la causa del problema. necesitas inicializar

$query1="";
$query2="";
$having="";

lo primero que me llama la atencion es el cambio en el orden de la fecha, revisa a ver si estan en orden correcto, que pasa si la fecha viene como m/d/y? o y-m-d?

usa un
echo($query1."<br>");
echo($query2);die();

antes de $respuesta = ...
solo para estar seguros de que si esta tomando los datos como debe ser.

yo verificaria si el origien las fechas vienen en el orden esperado, usa fechas donde el dia o el mes sean mayores a 12, esto para provocar el error.

si los datos vienen de mysql entonces revisa el formato de fecha en que se guardo la fecha, muchas veces es mejor guardar la fecha como numero y al mostrar en pantalla le das el formato que necesites.

veo que tienes sucursales y articulos, los articulos estan por sucursal? si estan asi entonces debes usar la empresa en el inner join.

bueno, hasta donde alcanzo a ver yo revisaria estos puntos.

si alguien mas ve algun otro posible problema adelante.

espero sea de ayuda, suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Angel (41 intervenciones) el 16/09/2014 01:10:07
La fecha se acomoda asi por que el formato se manda como 01-08-2014, por eso se hace un explode y se acomoda la fecha para la consulta.

Lo raro gonzalo es que te comento cuando es un rango de fechas corto de 2 dias si se muestra la informacion en el php, pero cuando se hace por 3 dias no lo hace. En el error_log no hay ningun detalle solo warnings mas ningun error.

El php deja de cargar, aumente el tiempo de ejecución y le di mas memoria para ver si era eso y tampoco. Me causa mucha desesperación por que si estuviera haciendo algo mal, no ejecutaría nada y tampoco es por los datos que regresa ya que como mencionaba son 237 registros de ese rango de fecha que se traba y son 13 mil de un rango de fecha que no se traba, así que si fuera el volumen de registros que regresa pues ese no me daria ni un dia o dos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Gonzalo (338 intervenciones) el 16/09/2014 16:35:55
bien, suponiendo que las fechas pasan bien

1-8-2014

es 1 de agosto o es 8 de enero?

si segun el programa se espera un reporte que contiene maximo 3 dias ... que pasa si en realidad estas pidiendo 3 meses?

1-1-2014
1-3-2014

1-1-2014
3-1-2014

cual de las 2 fechas es marzo?

revisa el origen de las fechas, posiblemente esta mandando la fecha en un orden diferente o pudieran estar capturadas mal.

espero sea de ayuda, suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Tiempos de Carga PHP

Publicado por xve (5518 intervenciones) el 16/09/2014 07:31:18
Angel, has revisado el log del Apache (o servidor web que utilices), para ver si hay algún error que no se visualiza en la pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Angel (41 intervenciones) el 17/09/2014 04:42:03
Las fechas estan bien, hice un echo despues que hace el explode y si se acomodan bien.

En el log de apache no hay erroes xve, somo warnings que siempre han existido.

Alguna otra idea? Cabe decir que el sistema dejo de funciónar de un dia para otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tiempos de Carga PHP

Publicado por Angel (41 intervenciones) el 17/09/2014 22:19:55
Como que algo estaba corrupto en los php.

Subi un respaldo de meses anteriores y funciono perfecto!!

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar