Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Saltar registros dentro de un foreach (https://www.clubdelphi.com/foros/showthread.php?t=91655)

Adrian Murua 27-03-2017 20:27:19

Saltar registros dentro de un foreach
 
Estimados Amigos:
Tengo dos tablas en mysql , una es de personas y otra es de telefonos relacionadas entre si por un campo "personas_id" en la tabla telefonos, tengo una consulta "seleccionar todos los telefonos que tiene una persona", la que arroja un conjunto de datos parecido a:

apellido telefono Personas_id
Roldan 541138451425 1
Roldan 541138111122 1
Roldan 541144444444 1
Perez 542614502354 2
Perez 542612222222 2
Juarez 543514542222 3


La he resumido en campos y registros. ;D

Como se puede ver si la persona tiene 2 o 3 numeros de telefonos tenemos un registro por cada numero, lo que yo deseo mostrar es una linea por cada persona y si tiene mas de un numero de telefono , en la columna telefono concatenar todos los numeros de esta persona, algo asi como:


apellido telefono Personas_id
Roldan 541138451425 | 541138111122 | 541144444444 1
Perez 542614502354 | 542612222222 2
Juarez 543514542222 3

Para esto uso el siguiente trozo de codigo, con dos foreach anidados:


Código PHP:

         if ($clientes){
            
            foreach(
$clientes->items as $cli){
               
               
$sfonos =  $cli->numero ' | '//variable que concatena el numero de telefono
 
               
foreach ($clientes->items as $cli1 ){
            
                  if (
$cli->personas_id == $cli1->personas_id){ // si es la misma persona concateno.
                     
                     
$sfonos .=  $cli1->numero ' | ';
                  }
                  
               }
               
               
$sfonos substr($sfonos0, -4); // quito el ultimo ' | ' agregado.
               
               
$this->aTelefonos[] = array(   // genero un array asociativo para mostrar
                     
'personas_id'=>$cli->personas_id,
                     
'apellido'=>$cli->apellido,
                     
'telefonos'=>$sfonos);
                   
// continue;
               
            
}
            
         } 

El codigo concatena correctamente, pero me sigue mostrando la misma cantidad de lineas como numero de telefonos tenga la persona , eso si me concatena en cada una de las lineas, lo que no se hacer es que en el foreach externo "salte" el registro que concatena , es decir cuando esta en "Roldan", tome el primer registro y salte los dos siguientes, como veran estuve probando con
Código PHP:

continue; 

, pero no resulta lo que quiero hacer.
Obviamente si hay otra forma de hacerlo, por favor me guian, desde ya muchas gracias.

roman 27-03-2017 21:21:41

Cita:

Empezado por Adrian Murua (Mensaje 514769)
Obviamente si hay otra forma de hacerlo, por favor me guian, desde ya muchas gracias.

No describes la estructura de tus tablas pero vamos a suponer que son así:

personas = (personas_id, apellido, ... )
telefonos = (personas_id, telefono, ...)

En MySQL puedes realizar esta consulta:

Código SQL [-]
SELECT apellido, telefono
FROM personas, GROUP_CONCAT(telefonos SEPARATOR '|')
WHERE personas.personas_id = telefonos.personas_id
GROUP BY personas.personas_id

con la cual obtienes directamente los resultados como los quieres, una línea por persona y los teléfonos concatenados por el caracter |.

LineComment Saludos

Adrian Murua 28-03-2017 00:26:46

Gracias Roman por tu respuesta , no conocia la existencia de GROUP_CONCAT, voy a probar a ver si sale, muchas gracias.


La franja horaria es GMT +2. Ahora son las 09:45:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi