PHP - Cargar un array de array desde consulta SQL en PHP

 
Vista:
sin imagen de perfil

Cargar un array de array desde consulta SQL en PHP

Publicado por David Ariel (4 intervenciones) el 14/09/2016 23:29:36
Buenas tardes.
He estado con este problema desde hace mucho tiempo y no logro solucionarlo. Lo que debo realizar es lo siguiente:
Tengo dos tablas (Clientes) - (Contactos) y tengo que devolver la lista de clientes con sus respectivos contactos en formato JSON ej: {"exito":true,"datos":[{"ruc":11111,"nombre":"aaaa","contactos":[{"nombre":"Roberto"},{"nombre":"Adrian"}]},{"ruc":22222,"nombre":"isijs","contactos":[{"nombre":"Maria"}]},{"ruc_ci":33333,"nombre":"bbbbbbb","contactos":[{"nombre":"Damian"},{"nombre":"Rosana"}]}],"errores":[]}

Me tira un resultado pero a todos los clientes le asigna el mismo contacto, tengo que mencionar que soy nuevo en PHP

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
<?php
//$data = $_POST['datos'];
$data = '{"num_cedula":"3479550"}';//la aplicacion pasa el numero de cedula del ejecutivo
$arrayData   = json_decode($data, true); //se desgloza el json que trae la app
$num_cedula   = $arrayData["num_cedula"]; //se almacena el numero de cedula en la variable
 
*************CONEXION BASE DE DATOS*****************/
	$usuario= 'xx';
	$pass = 'xxxxxxxxxx';
	$servidor = 'xxxxxxxxxx';
	$basedatos = 'xxxxxxxxxx';
	$info = array('Database'=>$basedatos, 'UID'=>$usuario, 'PWD'=>$pass);
	$conexion = sqlsrv_connect($servidor, $info);
/*----------------------------------------------------*/
/*************DEFINICION DE VARIABLES****************/
	$contactos = []; //es el array en donde se van a almacenar todos los contactos de los cada cliente
	$contacto = [];
	$clientes = [];
	$cliente = [];
/*************CONSULTAS A LA BASE DE DATOS********************/
//SRCIPT PARA OBTENER LOS CLIENTES//
$sql_clientes = "select c.RucCI, DV, Nombre, c.Apellido, c.Telefono, NombreEmpresa, c.Direccion, c.CodEjecutivo, e.NumCedula
from EM_SE_Cliente c
join EM_GO_AsignarEjecutivo a on a.Codigo = c.codejecutivo
join Baltic.dbo.EM_Ejecutivos e on a.NumCedula = e.NumCedula
where e.NumCedula = $num_cedula
";
$stmtc = sqlsrv_query($conexion, $sql_clientes);
$i = 0;
while($row_c = sqlsrv_fetch_object($stmtc)){
	$clientes["ruc_ci"]=$row_c->RucCI;
	$clientes["nombre"]=$row_c->Nombre;
	$ruc_ci = $clientes["ruc_ci"];
	$sql_contactos = "select NombreApellido, Apellido, Telefono, Observaciones from EM_GCS_Contactos
	where RucCI = $ruc_ci";
	$stmt = sqlsrv_query($conexion, $sql_contactos);
	$p = 0;
	while ($row = sqlsrv_fetch_object($stmt)){
		$contactos[$p]["nombre"]=$row->NombreApellido;
		$p = $p++;
	}
	//array_push($contacto, $contactos);
	$clientes["contactos"]=$contactos;
	array_push($cliente, $clientes);
	$i = $i++;
}
 
/*-------------------------------------------------------------------*/
 
$resp = array("exito"=>true,"datos"=>$cliente,"errores"=>array());
 
$jsonResponse = json_encode($resp);
echo $jsonResponse;
?>
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
Imágen de perfil de Juan Camilo
Val: 107
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Cargar un array de array desde consulta SQL en PHP

Publicado por Juan Camilo (21 intervenciones) el 15/09/2016 03:00:40
creo que mysql_fetch_array te podria servir
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
sin imagen de perfil

Cargar un array de array desde consulta SQL en PHP

Publicado por David Ariel (4 intervenciones) el 15/09/2016 15:21:15
En realidad en mi caso sería sqlsrv_fetch_array y ya lo probe sin ningun resultado, gracias por el aporte
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Cargar un array de array desde consulta SQL en PHP

Publicado por kip (877 intervenciones) el 15/09/2016 16:00:24
Hola, estas haciendo mal uso del bucle WHILE, por eso se forma mal el array, intentalo de esta forma:

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
/*************CONSULTAS A LA BASE DE DATOS********************/
//SRCIPT PARA OBTENER LOS CLIENTES//
$sql_clientes = "select c.RucCI, DV, Nombre, c.Apellido, c.Telefono, NombreEmpresa, c.Direccion, c.CodEjecutivo, e.NumCedula
from EM_SE_Cliente c
join EM_GO_AsignarEjecutivo a on a.Codigo = c.codejecutivo
join Baltic.dbo.EM_Ejecutivos e on a.NumCedula = e.NumCedula
where e.NumCedula = $num_cedula
";
$stmtc = sqlsrv_query($conexion, $sql_clientes);
$i = 0;
while($row_c = sqlsrv_fetch_object($stmtc)){
	$clientes[$i]["ruc_ci"]=$row_c->RucCI;
	$clientes[$i]["nombre"]=$row_c->Nombre;
	$i = $i++;
}
 
foreach($clientes as $key => $cliente) {
	$ruc_ci = $cliente["ruc_ci"];
	$sql_contactos = "select NombreApellido, Apellido, Telefono, Observaciones, RucCI from EM_GCS_Contactos
	where RucCI = $ruc_ci";
	$stmt = sqlsrv_query($conexion, $sql_contactos);
	$p = 0;
	while ($row = sqlsrv_fetch_object($stmt)){
		$clientes[$key]["contactos"][$p]["nombre"]=$row->NombreApellido;
		$p = $p++;
	}
}
 
/*-------------------------------------------------------------------*/
 
$resp = array("exito"=>true,"datos"=>$clientes,"errores"=>array());
 
$jsonResponse = json_encode($resp);
echo $jsonResponse;
?>

Nos comentas y muestras el resultado, espero funcione.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Cargar un array de array desde consulta SQL en PHP

Publicado por David Ariel (4 intervenciones) el 15/09/2016 18:31:47
Hola kip, ya me tengo el resultado que quería, a este código que me pasaste le corregimos la parte del incremento en lugar de $i = $i++ es simplemente $i++, lo mismo para el indice $p. Paso el código completo por si le sirva a alguien.


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
<?php
//$data = $_POST['datos'];
$data = '{"num_cedula":"3479550"}';//la aplicacion pasa el numero de cedula
$arrayData   = json_decode($data, true); //se desgloza el json que trae la app
$num_cedula   = $arrayData["num_cedula"]; //se almacena el numero de cedula en la variable
/*aca se definen los parametros para la conexion a la base de datos.
*************CONEXION BASE DE DATOS*****************/
	$usuario= '*********';
	$pass = '***********';
	$servidor = '***************';
	$basedatos = '************';
	$info = array('Database'=>$basedatos, 'UID'=>$usuario, 'PWD'=>$pass);
	$conexion = sqlsrv_connect($servidor, $info);
/*----------------------------------------------------*/
/*************CONSULTAS A LA BASE DE DATOS********************/
//SRCIPT PARA OBTENER LOS CLIENTES//
$sql_clientes = "select c.RucCI, DV, Nombre, c.Apellido, c.Telefono, NombreEmpresa, c.Direccion, c.CodEjecutivo, e.NumCedula
from EM_SE_Cliente c
join EM_GO_AsignarEjecutivo a on a.Codigo = c.codejecutivo
join Baltic.dbo.EM_Ejecutivos e on a.NumCedula = e.NumCedula
where e.NumCedula = $num_cedula
";
$stmtc = sqlsrv_query($conexion, $sql_clientes);
$i = 0;
while($row_c = sqlsrv_fetch_object($stmtc)){
	$clientes[$i]["ruc_ci"]=$row_c->RucCI;
	$clientes[$i]["nombre"]=$row_c->Nombre;
	$i++;
}
 
foreach($clientes as $key => $cliente) {
	$ruc_ci = $cliente["ruc_ci"];
	$sql_contactos = "select NombreApellido, Apellido, Telefono, Observaciones, RucCI from EM_GCS_Contactos
	where RucCI = $ruc_ci";
	$stmt = sqlsrv_query($conexion, $sql_contactos);
	$p = 0;
	while ($row = sqlsrv_fetch_object($stmt)){
		$clientes[$key]["contactos"][$p]["nombre"]=$row->NombreApellido;
		$p++;
	}
}
 
/*-------------------------------------------------------------------*/
 
$resp = array("exito"=>true,"datos"=>$clientes,"errores"=>array());
 
$jsonResponse = json_encode($resp);
echo $jsonResponse;
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Cargar un array de array desde consulta SQL en PHP

Publicado por David Ariel (4 intervenciones) el 23/09/2016 15:57:30
Buenos días, de vuelta por aquí!
Pasa que este código me devuelve de manera espectacular cuando el cliente tiene cargados los contactos como muestro a continuación:
{"exito":true,"datos":[{"ruc_ci":5435968,"dv":null,"nombre":"alfredo","apellido":"aguiar","nombre_empresa":null,"direccion":null,"telefono":null,"email":null,"contactos":[{"nombre":"Adrian","apellido":"Rodriguez","telefono":852369,"observaciones":"Administrativo"},{"nombre":"Roberto","apellido":"Perez","telefono":741123,"observaciones":"Operativo"}]},{"ruc_ci":51111112,"dv":0,"nombre":"alfredo","apellido":"fernandez","nombre_empresa":"em","direccion":"azara","telefono":"1224","email":"fredox"}],"errores":[]}
El problema esta cuando el cliente no tiene registrado ningún contacto, ahí me debería devolver el array vació pero no dejar de mostrar ese campo de contactos. Debería quedar así:
{"exito":true,"datos":[{"ruc_ci":5435968,"dv":null,"nombre":"alfredo","apellido":"aguiar","nombre_empresa":null,"direccion":null,"telefono":null,"email":null,"contactos":[{"nombre":"Adrian","apellido":"Rodriguez","telefono":852369,"observaciones":"Administrativo"},{"nombre":"Roberto","apellido":"Perez","telefono":741123,"observaciones":"Operativo"}]},{"ruc_ci":51111112,"dv":0,"nombre":"alfredo","apellido":"fernandez","nombre_empresa":"em","direccion":"azara","telefono":"1224","email":"fredox","contactos":[]}],"errores":[]}
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