Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2017
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
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.
__________________
Adrián Murúa.
Responder Con Cita
  #2  
Antiguo 27-03-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Adrian Murua Ver Mensaje
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
Responder Con Cita
  #3  
Antiguo 28-03-2017
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
Thumbs up

Gracias Roman por tu respuesta , no conocia la existencia de GROUP_CONCAT, voy a probar a ver si sale, muchas gracias.
__________________
Adrián Murúa.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Agrupar registros dentro de un DBGrid jjaen26 MySQL 1 25-10-2010 02:34:40
como proteger un foreach en php richy08 PHP 1 04-09-2010 06:29:23
foreach() foetus PHP 1 04-04-2008 00:00:34
Como saco las valores con un foreach maravert PHP 2 20-02-2008 08:10:33
foreach altp .NET 4 24-10-2006 18:17:01


La franja horaria es GMT +2. Ahora son las 17:55:14.


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
Copyright 1996-2007 Club Delphi