Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Macroconsulta con consultas anidadas

Estas en el tema de Macroconsulta con consultas anidadas en el foro de PHP en Foros del Web. Buenas, tengo una macroconsulta muy muy muy grande. La idea de la consulta es poder comprobar la gente disponible en un periodo determinado (esto viene ...
  #1 (permalink)  
Antiguo 08/04/2014, 02:13
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Macroconsulta con consultas anidadas

Buenas, tengo una macroconsulta muy muy muy grande. La idea de la consulta es poder comprobar la gente disponible en un periodo determinado (esto viene almacenado en una tabla). A continuación con todos los disponibles buscaría si dentro de ese intervalo de tiempo tiene algún partido asignado, devolviendo la hora del partido. Después se comprueban todos los que pertenezcan a una determinada localidad de todos los disponibles. A continuación calcula que entre ese partido y el que se le va a asignar haya una diferencia determinada (en este caso hora y tres cuartos). Si hay esta diferencia de hora se mostrarán todas las personas disponibles de esa localidad, en caso contrario se haría una consulta para comprobar las personas de las localidades más cercanas que cumplan los requisitos anteriores. Después de haber soltado este rollo viene donde encuentro los problemas. La primera consulta la ejecuto y funciona perfectamente pero a partir de ahí ya no se ejecuta más o parece que no se ejecuta. Para depurar errores he ido poniendo "echo prueba" para probar si entra o no en los bucles y ya en el segundo, después de la segunda consulta no entra. No creo que la manera de plantear este problema sea la más eficiente entonces espero que alguien pueda echarme una mano para hacer esto mejor o si esta es la única manera que me ayude a resolver mi problema. Dejo aquí el código de lo que tengo ahora mismo hecho. Muchas gracias por leer este tostón
Código PHP:
Ver original
  1. if($result=$mysqli->query("SELECT EQUIPO_ARBITRAL.Codigo_arbitro FROM EQUIPO_ARBITRAL INNER JOIN ARBITRO
  2.     ON EQUIPO_ARBITRAL.Codigo_arbitro=ARBITRO.Codigo_arbitro INNER JOIN DISPONIBILIDAD
  3.     ON ARBITRO.Codigo_arbitro=DISPONIBILIDAD.Codigo_arbitro WHERE SM='Si'")){ /*Comprueba la disponibilidad el sabado por la mañana*/
  4.         while($row=$result->fetch_array()){
  5.             $codigo=$row["Codigo_arbitro"];
  6.             if($result2=$mysqli->query("SELECT Codigo_arbitro, EQUIPO_ARBITRAL.Nombre, Apellidos, Hora, LOCALIDAD.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
  7.             INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.ArbPrin
  8.             INNER JOIN PABELLON ON P.Codigo_pabellon=PABELLON.Codigo_pabellon
  9.             INNER JOIN LOCALIDAD ON PABELLON.Codigo_localidad=LOCALIDAD.Codigo_localidad WHERE Codigo_arbitro IN($codigo)")){   /*Comprueba los arbitros disponibles y si tienen partidos, devolviendo la hora*/
  10.                 while($row2=$result2->fetch_array()){
  11.                     $hora1=$row2["Hora"];
  12.                     $localidad=$row2["Loca"];
  13.                     if($result3=$mysqli->query("SELECT Codigo_arbitro, Nombre, Apellidos, Cod_localidad FROM EQUIPO_ARBITRAL WHERE Cod_localidad=$localidad")){ /*Comprueba la localidad de los arbitros*/
  14.                         while($row3=$result3->fetch_array()){
  15.                             if($result4=$mysqli->query("SELECT TIMEDIFF('$hora1','19:30') AS 'Diferencia'")){      /*Comprueba que haya diferencia entre el partido anterior y el asignado*/
  16.                                 while($row4=$result4->fetch_array()){
  17.                                     $diferencia=$row4["Diferencia"];
  18.                                     $dif=strtotime($diferencia);
  19.                                     $intervalo1 = strtotime( "01:45" );
  20.                                     $intervalo2 = strtotime( "-01:45" );
  21.                                     if($dif<$intervalo1 OR $dif>$intervalo2){
  22.                                         /*Aquí se debe buscar otros árbitros*/
  23.                                     }
  24.                                     else{
  25.                                         if($result5=$mysqli->query("SELECT Nombre, Apellidos FROM EQUIPO_ARBITRAL WHERE Codigo_arbitro=$codigo ORDER BY Apellidos")){
  26.                                             while($row5=$result5->fetch_array()){
  27.                                                 $nombre=$row5["Nombre"];
  28.                                                 $apellidos=$row5["Apellidos"];
  29.                                                 echo $apellidos.", ".$nombre;
  30.                                             }
  31.                                         }
  32.                                         else{
  33.                                             echo $mysqli->errno, $mysqli->error;
  34.                                         }  
  35.                                     }
  36.                                 }
  37.                             }
  38.                             else{
  39.                                 echo $mysqli->errno, $mysqli->error;
  40.                             }
  41.                         }
  42.                     }
  43.                     else{
  44.                         echo $mysqli->errno, $mysqli->error;
  45.                     }
  46.                 }
  47.             }
  48.             else{
  49.                 echo $mysqli->errno, $mysqli->error;
  50.             }          
  51.         }
  52.     }
  53.     else{
  54.         echo $mysqli->errno, $mysqli->error;
  55.     }
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #2 (permalink)  
Antiguo 08/04/2014, 03:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Macroconsulta con consultas anidadas

Yo extenderia tu tecnica de los echo, pero en lugar de imprimir "prueba" imprimiria la query para ver que esta lanzando.....

Código PHP:
Ver original
  1. echo "La query<br /><br />SELECT Codigo_arbitro, EQUIPO_ARBITRAL.Nombre, Apellidos, Hora, LOCALIDAD.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
  2.            INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.ArbPrin
  3.            INNER JOIN PABELLON ON P.Codigo_pabellon=PABELLON.Codigo_pabellon
  4.            INNER JOIN LOCALIDAD ON PABELLON.Codigo_localidad=LOCALIDAD.Codigo_localidad WHERE Codigo_arbitro IN($codigo)<br />";
  5. if($result2=$mysqli->query("SELECT Codigo_arbitro, EQUIPO_ARBITRAL.Nombre, Apellidos, Hora, LOCALIDAD.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
  6.            INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.ArbPrin
  7.            INNER JOIN PABELLON ON P.Codigo_pabellon=PABELLON.Codigo_pabellon
  8.            INNER JOIN LOCALIDAD ON PABELLON.Codigo_localidad=LOCALIDAD.Codigo_localidad WHERE Codigo_arbitro IN($codigo)")){  
  9. /*Comprueba los arbitros disponibles y si tienen partidos, devolviendo la hora*/

Por otro lado yo intenteria liberar recursos no anidando bucles contra las consultas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/04/2014 a las 03:44
  #3 (permalink)  
Antiguo 08/04/2014, 03:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Macroconsulta con consultas anidadas

Por otro lado yo intenteria liberar recursos no anidando bucles contra las consultas....

Código PHP:
Ver original
  1. $i=0;
  2. $arCodigo=array();
  3. while($row=$result->fetch_array()){
  4.             $arCodigo[$i]=$row["Codigo_arbitro"];
  5. $i++;
  6. }

El segundo bucle lo haces sobre $arCodigo....


(yo queria ponerlo en el post anterior!!!!???)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 08/04/2014, 04:16
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Respuesta: Macroconsulta con consultas anidadas

Pues voy a intentar hacerlo como me has dicho, voy a guardar todos los resultados de las consultas en array y poner cada consulta por separado dentro de bucles for para leer los array. Cuando lo pruebe esta tarde en mi pc con la base de datos ya escribo por si hay algún problema o va todo perfecto
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #5 (permalink)  
Antiguo 09/04/2014, 00:33
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Respuesta: Macroconsulta con consultas anidadas

Ya está todo solucionado, ya me van todas las consultas a la perfección
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe

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