Foros del Web » Programando para Internet » PHP »

Optimizar Codigo PHP

Estas en el tema de Optimizar Codigo PHP en el foro de PHP en Foros del Web. Mirando en google encontre esto: Cita: Avoid doing SQL queries within a loop A common mistake is placing a SQL query inside of a loop. ...
  #1 (permalink)  
Antiguo 26/06/2012, 12:35
 
Fecha de Ingreso: junio-2012
Mensajes: 77
Antigüedad: 11 años, 10 meses
Puntos: 5
Optimizar Codigo PHP

Mirando en google encontre esto:
Cita:
Avoid doing SQL queries within a loop

A common mistake is placing a SQL query inside of a loop. This results in multiple round trips to the database, and significantly slower scripts. In the example below, you can change the loop to build a single SQL query and insert all of your users at once.

Código PHP:
foreach ($userList as $user) {
  
$query 'INSERT INTO users (first_name,last_name) VALUES("' $user['first_name'] . '", "' $user['last_name'] . '")';
  
mysql_query($query);
  } 
Produces:

Código:
INSERT INTO users (first_name,last_name) VALUES("John", "Doe")
Instead of using a loop, you can combine the data into a single database query.

Código PHP:
$userData = array();
foreach (
$userList as $user) {
    
$userData[] = '("' $user['first_name'] . '", "' $user['last_name'] . '")';
 }
$query 'INSERT INTO users (first_name,last_name) VALUES' implode(','$userData);
mysql_query($query); 
Produces:

Código:
INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
y me gustaria optimizar mi codigo.. ya que tengo un for que me hace 36 querys.... se notara la diferencia?
alguien me podria ayudar....
Pdta: el codigo es muy largo asi que lo pasaria por email...
gracias
  #2 (permalink)  
Antiguo 26/06/2012, 13:51
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Optimizar Codigo PHP

Buenas,

Creo que deberías poner los trozos donde realizas las sentencias sql y te podemos dar consejos sobre como optimizarlo.

Saludos.
  #3 (permalink)  
Antiguo 26/06/2012, 14:05
 
Fecha de Ingreso: junio-2012
Mensajes: 77
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Optimizar Codigo PHP

Código PHP:
<?php session_start(); ?>
<?php
header
('Server: Apache');

$_SESSION['valid_user'];
$_SESSION['tipo'];
//Sino es usuario de algun tipo se envia para error puesto que no esta autorizado..
if(!isset($_SESSION['valid_user'])&& $_SESSION['tipo']!=|| !isset($_SESSION['valid_user'])&& $_SESSION['tipo']!=3||!isset($_SESSION['valid_user'])&& $_SESSION['tipo']!=1)header("location: includes/error.php");

if(isset(
$_SESSION['tipo']))
{
    if(isset(
$_SESSION['valid_user'])&& $_SESSION['tipo']==1)/*header("location: logout.php")*/;
    if(isset(
$_SESSION['valid_user'])&& $_SESSION['tipo']==2)header("location: formulario.php");
    if(isset(
$_SESSION['valid_user'])&& $_SESSION['tipo']==3)header("location: formulario.php");
}

@include(
"includes/conexion.php");
conectar();

echo 
"<pre>"print_r($_POSTtrue) . "</pre>";
$idEmpleado$_POST['idEmpleado'];
$fecha=$_POST['fecha'];
$semestre=$_POST['semestre'];

$queryArea "SELECT * FROM empleado WHERE idEmpleado='$idEmpleado'";
$resultArea mysql_query($queryArea);
$rowArea =mysql_fetch_array($resultArea);
$idArea=$rowArea['idAreaEsp'];
$idArea="001";

$numero=numeroHabilidades($idArea);
$resultNumero mysql_query($numero);
$resultNumero=mysql_result($resultNumero,0);

$idHabilidadidHabilidad($idArea);
$resultidHabilidadmysql_query($idHabilidad);
for (
$inicio=1;$inicio<=$resultNumero;$inicio++){
    
$idHabilidad=mysql_fetch_array($resultidHabilidad);
    
$idHabilidad=$idHabilidad['idHabilidad'];
    
$queryHabilidad=datosHabilidad($idHabilidad);
    
$resultHabilidadmysql_query($queryHabilidad);
    
$rowHabilidad mysql_fetch_array($resultHabilidad);
    
$idHabilidad=$rowHabilidad['idHabilidad'];
    
$queryIndicador=numeroIndicadores($idHabilidad);

    
$resultIndicador mysql_query($queryIndicador);
    
$num_results mysql_num_rows($resultIndicador);
    for (
$idIndicador=1$idIndicador<= $num_results$idIndicador++)
    {
        
//        $idIndicador=$rowIndicador['idIndicador'];
        
$calificacion $_POST["Indicador".$idHabilidad."-".$idIndicador.""];
        
$calificacion =($calificacion*0.277777)/5;
        if(isset(
$_SESSION['tipo']))
        {
            if(
$_SESSION['tipo']==1)//empleado
            
{
                
$queryInsert "INSERT INTO calificacionempleado VALUES ('".$idHabilidad."','".$idIndicador."','".$idEmpleado."','".$calificacion."', '".$fecha."','".$semestre."')";
            }elseif(
$_SESSION['tipo']==2)//jefe
            
{
                
$autoEva=$_POST['autoEva'];
                if (
$autoEva==0)//calificacion jefe
                
{
                    
$queryInsert "INSERT INTO calificacionjefe VALUES ('".$idHabilidad."','".$idIndicador."','".$idEmpleado."','".$calificacion."', '".$fecha."','".$semestre."')";
                }elseif (
$autoEva==1)//autoevaluacion jefe
                
{
                    
$queryInsert "INSERT INTO calificacionempleado VALUES ('".$idHabilidad."','".$idIndicador."','".$idEmpleado."','".$calificacion."', '".$fecha."','".$semestre."')";
                }
            }
        }
        echo 
$queryInsert.'<br>';
        
//        $resultInsert = mysql_query($queryInsert);
    
}
}
?>
  #4 (permalink)  
Antiguo 26/06/2012, 15:26
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: Optimizar Codigo PHP

si son 36 no vas a notar diferencia. ni te enrosques.

lo que se hace es ir armando la consulta en el bucle, y despues la ejecutas toda de una.

ejemplo: suponiendo $arr es un array de arreglitos a insertar
Código PHP:
Ver original
  1. $consulta = "insert into tabla (id, nombre, apellido) values ";
  2. for($i = 0; $i < count($arr); $i++ )
  3. {
  4.   $consulta .= "(".implode($arr[$i], ',')."),";
  5. }
y listo ahi tenes la consulta, quedaría borrar la última ',' que se genera
Código PHP:
Ver original
  1. $consulta = substr ($consulta, 0, strlen($cconsulta) - 1);
ah! y si hay strings primero recorrer y meterle las comillas simples porque sino da error la consulta
  #5 (permalink)  
Antiguo 26/06/2012, 15:27
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: Optimizar Codigo PHP

otra cosa, ojo que tiene un límite eso, la consulta tiene determinada longitud máxima, que ahora no me acuerdo cuanto es pero te limita

Etiquetas: mysql, 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 02:52.