Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Repetir registros

Estas en el tema de Repetir registros en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original Hola buenas tardes tengo la siguiente consulta:   SELECT     domiciliaciones.CCC ,    domiciliaciones.Idpapis ,    domiciliaciones.Titular , ...
  #1 (permalink)  
Antiguo 11/09/2013, 08:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Pregunta Repetir registros

Código MySQL:
Ver original
  1. Hola buenas tardes tengo la siguiente consulta:
  2.  
  3. SELECT    
  4. domiciliaciones.CCC,    domiciliaciones.Idpapis,    domiciliaciones.Titular,    domiciliaciones.SMAT,     domiciliaciones.`Desc`,    padres.`Nombre Padre`,    padres.`Primer Apellidos Padre`,    padres.`Segundo Apellido Padre`,    padres.IdPadre,     alumnos.IdPadre,    alumnos.`Nombre Alumno`,    alumnos.`Primer Apellido`,    alumnos.`Segundo Apellido`,    alumnos.IdGrupo,    aulas.IdAsignacion,     aulas.`Nombre Grupo`,  count(*)  AS alumnos
  5. FROM    domiciliaciones
  6. INNER JOIN padres ON domiciliaciones.Idpapis = padres.IdPadre    
  7. INNER JOIN alumnos ON padres.IdPadre = alumnos.IdPadre    
  8. INNER JOIN aulas ON alumnos.IdGrupo = aulas.IdAsignacion
  9. WHERE (domiciliaciones.CCC = '')
  10. GROUP BY padres.IdPadre
Uno diferentes tablas y agrupo el resultado con los alumnos que tienen el mismo IdPadre, la cuestion es que luego en el campo quisiera repetir aquellos nombres de los alumnos que tienen el mismo IdPadre, y no se como hacerlo.
Tengo puesto esto:
Cita:
Editado: Código de programación no permitido en los foros de Bases de Datos. Leer las normas, por favor.
Pero me inserta todos los alumnos. Podias ayudarme.

Gracias

Última edición por gnzsoloyo; 11/09/2013 a las 09:03
  #2 (permalink)  
Antiguo 11/09/2013, 08:42
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Repetir registros

podrías usar al menos un resaltador de código, no? me arden los ojos .... creo que este tema es más bien para el foro de SQL
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 11/09/2013, 09:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Cita:
quisiera repetir aquellos nombres de los alumnos que tienen el mismo IdPadre
¿Te refieres a poner todos nombres de los alumnos del mismo padre en un sólo campo de una misma columna? ¿Agrupando por padre?
Eso sería usando GROUP_CONCAT() sobre el campo y agrupando por padre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/09/2013, 16:06
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Gracias, he probado como me has indicado y me funciona.
Lo he ejecutado y me muestra líneas y en el GROUP_CONTACT(alumnos.idAlumno, alumnos.Nombre)
me muestra los id de los alumnos que tienen el mismo padre.
Pero ahora me surge un problema.
Cuando lo inserto no me deja ningun espacio entre registros ¿como podría hacerlo?



Muchas gracias

Última edición por quieropaginaweb; 11/09/2013 a las 16:26
  #5 (permalink)  
Antiguo 11/09/2013, 16:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Repetir registros

usa SEPARATOR dentro del GROUP_CONTACT(alumnos.idAlumno, alumnos.Nombre SEPARATOR " ")
También puedes ordenar dentro del GROUP_CONCAT. Mira este ejemplo:
http://mysql.conclase.net/curso/?sqlfun=GROUP_CONCAT
  #6 (permalink)  
Antiguo 11/09/2013, 17:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Cita:
Cuando lo inserto no me deja ningun espacio entre registros ¿como podría hacerlo?
A mí no me queda claro a qué te estás refiriendo con "espacio entre registros".
¿Podrías postear una imagen parra ver si es lo que @Jurena entiende o es otra cosa?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/09/2013, 00:29
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Tengo la consulta siguiente:

Código MySQL:
Ver original
  1. SELECT padres.IdPadre,    padres.`Nombre Padre`,    padres.`Primer Apellidos Padre`,    padres.`Segundo Apellido Padre`,    padres.`Pago matricula`,    padres.CCC,    alumnos.IdAlumno,  
  2.  
  3. GROUP_CONCAT(alumnos.`Nombre Alumno`, alumnos.`Primer Apellido`, alumnos.`Segundo Apellido`),    alumnos.`Nombre Alumno`,    alumnos.`Primer Apellido`,    alumnos.`Segundo Apellido`,    alumnos.IdGrupo,    alumnos.Confirmado,    alumnos.`Alumno nuevo`,    alumnos.`pago Matricula`,    grupos.IdGrupo,    grupos.`Nombre Grupo`,    grupos.Precio,    grupos.Material,    grupos.Matricula
  4. FROM padres
  5. INNER JOIN alumnos ON padres.IdPadre = alumnos.IdPadre    
  6. INNER JOIN grupos ON alumnos.IdGrupo = grupos.IdGrupo
  7. WHERE (alumnos.Confirmado = '1') AND    (padres.`Forma de pago` = 'INGRESO EN CUENTA') GROUP BY padres.IdPadre

MOSTRAR REGISTRO:


echo $row_recibos['GROUP_CONCAT(alumnos.`Nombre Alumno`, alumnos.`Primer Apellido`, alumnos.`Segundo Apellido`)'];

RESULTADO

Cita:
CARLOSPEREZREUIZ, PAULALOPEZBENITEZ
NECESITO SI ES POSIBLE QUE ESTE SEPARADO CADA CAMPO:
Cita:
CARLOS PEREZ RUIZ
PAULA LOPEZ BENITEZ
Espero haberme explicado

Gracias por vuestra ayuda

Última edición por gnzsoloyo; 12/09/2013 a las 03:15
  #8 (permalink)  
Antiguo 12/09/2013, 03:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Bien, recién ahora resulta claro a qué te refieres, y es un problema de semantica muy común, que surgió de tu primer post, cuando dices:
Cita:
agrupo el resultado con los alumnos que tienen el mismo IdPadre,
Me explico: Lo que quieres lograr no es agrupar (GROUP), sino ordenar (ORDER BY).
Agrupamiento es cuando consolidas datos, generando sumas o agregados sobre una o más columnas.
Hacer que los diferentes registros se "agrupen" visualmente, es ordenar, no agrupar.
De todos modos, si la idea es que tres campos se combinen en uno, estamos cerca:
Código MySQL:
Ver original
  1.     P.IdPadre,    
  2.     P.`Nombre Padre`,    
  3.     P.`Primer Apellidos Padre`,    
  4.     P.`Segundo Apellido Padre`,    
  5.     P.`Pago matricula`,    
  6.     P.CCC,    
  7.     A.IdAlumno,  
  8.     CONCAT(A.`Primer Apellido`, ' ', A.`Segundo Apellido`, ', ', A.`Nombre Alumno`) NombreAlumno ,
  9.     A.IdGrupo,    
  10.     A.Confirmado,    
  11.     A.`Alumno nuevo`,    
  12.     A.`pago Matricula`,    
  13.     G.IdGrupo,    
  14.     G.`Nombre Grupo`,    
  15.     G.Precio,    
  16.     G.Material,    
  17.     G.Matricula
  18. FROM padres  P INNER JOIN alumnos A ON P.IdPadre = A.IdPadre    
  19.     INNER JOIN grupos G ON A.IdGrupo = G.IdGrupo
  20.     a.Confirmado = '1'
  21.     AND    P.`Forma de pago` = 'INGRESO EN CUENTA'
  22. ORDER BY P.P.`Primer Apellidos Padre`, P.`Segundo Apellido Padre`,    NombreAlumno
Ahora bien, si quieres que se agrupen en una misma columna resultado los nombres de todos los hijos de un msmo padre, sólo tiene sentido hacerlo si descrtas todos los campos que pueden contener datos diferentes entre registros:
Cita:
A.IdAlumno,
A.IdGrupo,
A.Confirmado,
A.`Alumno nuevo`,
A.`pago Matricula`,
G.IdGrupo,
G.`Nombre Grupo`,
G.Precio,
G.Material,
G.Matricula
Porque los agrupamientos sólo deben existir sobre los campos que son comunes a todos, y los valores de todos esos dependen de cada alumno separado.
Si la idea es generar un especie de reporte considerad0, es posible que debas hacerlo programaticamente en base a los datos obtenidos, pero no directamente desde la consulta, o de lo contrario los datos serán erróneos en algunas partes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/09/2013 a las 04:11
  #9 (permalink)  
Antiguo 12/09/2013, 04:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

No lo entiendo???

Ahora con la consulta que me indicas si agrupo el nombre del alumno pero creo que no me sirve.

Te indico con una imagen


Yo en la pagina de consulta recojo todos los registros pero aquellos padres que tienen más de 1 hijo tengo que mostrarlo como te indico en la imagen.

Gracias por tu ayuda.
  #10 (permalink)  
Antiguo 12/09/2013, 07:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Algo así me suponía: Estás tratando de lograr un reporte, y la consulta que haces no resulta completamente práctica para eso.
Bueno, para obtener ese resultado habría que hacer algo como:
Código MySQL:
Ver original
  1.     P.IdPadre,    
  2.     CONCAT (P.`Nombre Padre`, ' ', P.`Primer Apellidos Padre`, ' ' , P.`Segundo Apellido Padre`) NombrePadre,    
  3.     A.IdAlumno,  
  4.     CONCAT(A.`Primer Apellido`, ' ', A.`Segundo Apellido`, ', ', A.`Nombre Alumno`) NombreAlumno ,
  5.     A.IdGrupo,    
  6.     G.`Nombre Grupo`,
  7.     SUM(G.Precio) Pagado
  8. FROM padres  P INNER JOIN alumnos A ON P.IdPadre = A.IdPadre    
  9.     INNER JOIN grupos G ON A.IdGrupo = G.IdGrupo
  10.     a.Confirmado = '1'
  11.     AND    P.`Forma de pago` = 'INGRESO EN CUENTA'
  12. GROUP BY     NombrePadre ASC, P.IdPadre ASC, NombreAlumno ASC, A.IdAlumno, A.IdGrupo, G.`Nombre Grupo` WITH ROLLUP
Siempre en el entendimiento que ciertas columnas repetirán datos, y esos detalles los deberás resolver programáticamente.
Te comento que este tipo de reporte se realizan fácilmente con algunas herramientas de BI (business intelligence), precisamente diseñadas para eso, donde esos detalles se han estandarizados para lograr los resultados buscados por el usuario. En tu caso deberás tratar de crear esa funcionalidad para tu propio uso (a menos que quieras buscar una herramienta como las que menciono).
No hay mucho otros caminos.

Si aún así quieres lograrlo a puro SQL, es muy probable que debamos caer en el uso de stored procedures, porque son varias etapas de consulta para lograr un reporte como lo estas mostrando. Y no hay consultas únicas que lo puedan lograr... Es decir, no son simples SELECTs, sin importar cuántos JOINs tengan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 12/09/2013, 08:26
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Ante todo gracias por tu interés
El resultado que me da es este:
992 PEPELUISLOPEZ 1353 CRISTINAVIDALORIVAS 37 55
992 ANARIVASLOPEZ 1353 CRISTINAVIDALORIVAS 37 55

La pregunta es ahora sabes como puedo separar los datos
ejemplo.
992 PEPE LUIS LOPEZ 1353 CRISTINA VIDAL ORIVAS 37 55

Muchas gracias
  #12 (permalink)  
Antiguo 12/09/2013, 08:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Creo que estás copiando mal la sentencia que yo te escribo..., porque yo en el CONCAT estoy poniendo espacios para separar cada cosa, y eso no puede salir mal...
Es eso, o estás programando mal lo que recibes.

¿Puedes postear la sentencia SQL tal y como la ejecutas tu?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 12/09/2013, 09:45
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Código MySQL:
Ver original
  1. padres.IdPadre,    
  2. CONCAT (padres.`Nombre Padre`,padres.`Primer Apellidos Padre`, padres.`Segundo Apellido Padre`) NombrePadre,  
  3. alumnos.IdAlumno,
  4. CONCAT (  alumnos.`Nombre Alumno`,alumnos.`Primer Apellido`,alumnos.`Segundo Apellido`) NombreAlumno,
  5. alumnos.IdGrupo,
  6. SUM(grupos.Precio) Pagado
  7. FROM padres INNER JOIN alumnos ON padres.IdPadre = alumnos.IdPadre    
  8. INNER JOIN grupos ON alumnos.IdGrupo = grupos.IdGrupo
  9. WHERE (alumnos.Confirmado = '1')  AND    (padres.`Forma de pago` = 'INGRESO EN CUENTA')
  10. GROUP BY NombrePadre ASC, padres.IdPadre ASC, NombreAlumno ASC, alumnos.IdAlumno, alumnos.IdGrupo, grupos.`Nombre Grupo` WITH ROLLUP

Gracias por tu esfuerzo

Última edición por gnzsoloyo; 12/09/2013 a las 09:57
  #14 (permalink)  
Antiguo 12/09/2013, 09:54
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Mira que soy......?¿?

Esta bien me habia olvidado las ' ' despues de cada campo.

Muchas gracias

Y si ahora quisiera que los registros del alumno cuyo padre sean el mismo se incluyeran , ¿que sería por programacion? repitiendo el registro?

Gracias
  #15 (permalink)  
Antiguo 12/09/2013, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Repetir registros

Cita:
Y si ahora quisiera que los registros del alumno cuyo padre sean el mismo se incluyeran , ¿que sería por programacion? repitiendo el registro?
Si te refieres a visualizarlo, es tema de programación.
Si la pregunta apunta a que la consulta de vuelva todos los del mismo padre... Se supone qu eso es lo que estamos haciendo, porque se está ordenando por ellos, de modo que saldrán en orden. De lo contrario deberás iterar los padres, y por cada uno realizar una consula indicando cual es el padre.
Otra posibilidad es paginar en función de cada padre diferente que encuentras en la lista a medida que procesas la tabla obtenida...
Hay varias formas de considerarlo.
¿Cuál es exactamente la idea
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 12/09/2013, 14:57
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

Si es para visualizar.
Y si ahora salen todos los hijos del mismo padre.
Muchas gracias.
Si se te ocurre como poder visualizar, te lo agradecería mucho

Gracias

Última edición por quieropaginaweb; 12/09/2013 a las 15:12
  #17 (permalink)  
Antiguo 12/09/2013, 15:14
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Repetir registros

¡POR FIN!
Muchas gracias a todos, he solucionado lo de los registros de la siguiente manera:
Cita:
Editado: Código de programación no permitido en Foros de BBDD.
De esa forma el resultado es:

LOPEZ RODRIGO PEPE
LOPEZ RODRIGO CARMEN

Espero que si alguien le surge alguna vez os pueda ayudar.
Muchas gracias por tu ayuda.

Última edición por gnzsoloyo; 12/09/2013 a las 17:44

Etiquetas: php, registros, repetir, select, 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 05:46.