Foros del Web » Programando para Internet » PHP »

Query Anidado

Estas en el tema de Query Anidado en el foro de PHP en Foros del Web. Hola Estoy tratando de hacer dos queries uno dentro del otro, el segundo query2 lo hago de acuerdo a la obtenido en el query 1 ...
  #1 (permalink)  
Antiguo 03/10/2016, 16:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Query Anidado

Hola

Estoy tratando de hacer dos queries uno dentro del otro, el segundo query2 lo hago de acuerdo a la obtenido en el query 1 (primer query) la idea es filtrar los registros con el query 1 en query 2, y dentro del query 2 sumar cada columna por separado (campo).

Tengo dos tablas:
Tabla 1 llamada "tipollamada" con un solo campo y 3 registros:
CALLSACCEPTED
CallAnswer
ABANDONEDNO


Tabla 2 llamada "registroreport2" con 3 campos: "CALLSACCEPTED", "CallAnswer" y "ABANDONEDNO", la data que tiene cada campo es:
CALLSACCEPTED CallAnswer ABANDONEDNO
3 2 1
4 2 2


Este el programa que estoy tratando de hacer:

Código:
	//Hago Query1 de tabla tipodedestino 
	$query1 = "SELECT tipollamadaE ".
	 "FROM tipollamada ";
	 "ORDER BY tipollamada DESC ";
	$result1 = mysql_query($query1) or die(mysql_error());	
		
		while($row1 = mysql_fetch_array($result1))
	{

	//Query2 pedir cada columna y sumarla individualmente
	$query2 = "SELECT tipollamada.tipollamadaE, registroreport2.CALLSACCEPTED, registroreport2.CallAnswer, registroreport2.ABANDONEDNO ";
	$result2 = mysql_query($query2) or die(mysql_error());	
	
	while($row2 = mysql_fetch_array($result2))
	{
                        //Entrar a sumar CALLSACCEPTED               
                         if ($row1['tipollamadaE']=="CALLSACCEPTED")
			{
				//Sumar Llamadas Accepted
				$Suma1=$Suma1+$row2['CALLSACCEPTED'];
				
			}
                      //Entrar a sumar CallAnswer 
                      if ($row1['tipollamadaE']=="CallAnswer")
			{
				//Sumar CallAnswer
				$Suma2=$Suma2+$row2['CallAnswer'];
                          }
                       //Entrar a sumar ABANDONEDNO 
                      if ($row1['tipollamadaE']=="ABANDONEDNO")
			{
				//Sumar ABANDONEDNO
				$Suma3=$Suma3+$row2['ABANDONEDNO'];
                          }	
			
			
		} //Termina Segundo QUery
		

}//Termina Primer QUery

echo $Suma1;
echo "-";
echo $Suma2;
echo "-";
echo $Suma3;
echo "-";

Obtengo los resultados de la suma pero multiplicado por 3, es decir el query 1 se hacer 3 veces y obtiene 3 veces las sumas, y eso esta mal. Deberia el query 1 por ejemplo seleccionar el campo "CALLSACCEPTED" en tabla 1 y con este dato traer solo los registros que coinciden en el query 2 , la suma deberia dar $Suma1=7, $Suma2=4 y $Suma3=3}

Gracias de Antemano!!
  #2 (permalink)  
Antiguo 04/10/2016, 05:48
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Query Anidado

Cita:
Iniciado por lexer Ver Mensaje
Estoy tratando de hacer dos queries uno dentro del otro, el segundo query2 lo hago de acuerdo a la obtenido en el query 1 (primer query) la idea es filtrar los registros con el query 1 en query 2, y dentro del query 2 sumar cada columna por separado (campo).
Si revisas el código, la primera select parece correcta y te devuelve los tipos de llamadas que tienes. Pero en cambio, en la segunda select no estás filtrando por la primera.

Además, el diseño de la base de datos es pésimo. "TipoLlamada" ha de ser una columna de la segunda tabla, y no el título del campo.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 04/10/2016, 05:54
Avatar de skywolker  
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 195
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Query Anidado

Prueba asi :

Código PHP:

$query1 
"SELECT tipollamadaE FROM tipollamada  ORDER BY tipollamada DESC ";


    
$query2 "SELECT * FROM tipollamada  ORDER BY tipollamada DESC"

Etiquetas: mysql, query, registro, select, sql, tabla
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 11:34.