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

No imprimir doble los registros en una vista

Estas en el tema de No imprimir doble los registros en una vista en el foro de Mysql en Foros del Web. Bueno les explico, tengo una vista que me cuenta el numero de integrantes de una familia, pero no quiero que se repitan los datos a ...
  #1 (permalink)  
Antiguo 05/07/2012, 09:26
 
Fecha de Ingreso: julio-2012
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta No imprimir doble los registros en una vista

Bueno les explico, tengo una vista que me cuenta el numero de integrantes de una familia, pero no quiero que se repitan los datos a la hora de imprimir, supongase que tengo 2 registros con los mismo apellidos (hernandez,perez) y me lo imprimi asi

HERNANDEZ | PEREZ | 2
HERNANDEZ | PEREZ | 2

y lo que quiero es que solo aparesca asi

HERNANDEZ | PEREZ | 2

mi codigo de la vista es este

Cita:
CREATE VIEW considencias_fam AS SELECT ap_paterno, ap_materno, (SELECT COUNT(ID_paciente) FROM pacientes WHERE
ap_paterno=ap_paterno AND ap_materno=ap_materno) AS total_Integrantes FROM pacientes;
  #2 (permalink)  
Antiguo 05/07/2012, 09:56
 
Fecha de Ingreso: julio-2012
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: No imprimir doble los registros en una vista

Oye por que no usas DISTINCT

Código:
CREATE VIEW considencias_fam AS SELECT DISTINCT ap_paterno, ap_materno, (SELECT COUNT(ID_paciente) FROM pacientes WHERE
ap_paterno=ap_paterno AND ap_materno=ap_materno) AS total_Integrantes FROM pacientes;
Bueno yo me respondo solo.
  #3 (permalink)  
Antiguo 05/07/2012, 11:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: No imprimir doble los registros en una vista

Hola cn16cn:

La función COUNT, al igual que MIN, MAX, AVG, etc. son funciones de agregación o de agrupación, lo que quiere decir que pueden utilizarse junto la cláusula GROUP BY para agrupar registros bajo cierto criterio.

En realidad creo que no hay necesidad de utilizar DISTINCT ni tampoco de utilizar una SUBCONSULTA... prueba así:

Código MySQL:
Ver original
  1. CREATE VIEW considencias_fam AS
  2. SELECT ap_paterno, ap_materno, COUNT(*) total_Integrantes
  3. FROM pacientes
  4. GROUP BY ap_paterno, ap_materno;

Saludos
Leo.
  #4 (permalink)  
Antiguo 06/07/2012, 12:15
 
Fecha de Ingreso: julio-2012
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: No imprimir doble los registros en una vista

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola cn16cn:

La función COUNT, al igual que MIN, MAX, AVG, etc. son funciones de agregación o de agrupación, lo que quiere decir que pueden utilizarse junto la cláusula GROUP BY para agrupar registros bajo cierto criterio.

En realidad creo que no hay necesidad de utilizar DISTINCT ni tampoco de utilizar una SUBCONSULTA... prueba así:

Código MySQL:
Ver original
  1. CREATE VIEW considencias_fam AS
  2. SELECT ap_paterno, ap_materno, COUNT(*) total_Integrantes
  3. FROM pacientes
  4. GROUP BY ap_paterno, ap_materno;

Saludos
Leo.

Hola Leo. Gracias, primero lo que pasa esque si quito el DISTINCT si me lo cuent pero se repite el dato, y la subconsult es para crear un nuevo campo llamado total_integrantes ya que dentro de mi tabla pacientes no existe ese campo. y muchas gracias
  #5 (permalink)  
Antiguo 06/07/2012, 12:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: No imprimir doble los registros en una vista

Hola de nuevo cn16cn:

¿Te tomaste el tiempo para probar la consulta que te puse?... creo que no (podría apostar a que no lo hiciste)... Si la probaste y no funcionó sería conveniente que me dijeras qué es lo que estuvo mal, para tomarlo en cuenta.

Si estoy en lo correcto tienes algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM pacientes;
  2. +-------------+------------+------------+
  3. | id_paciente | ap_paterno | ap_materno |
  4. +-------------+------------+------------+
  5. |           1 | HERNANDEZ  | PEREZ      |
  6. |           2 | HERNANDEZ  | PEREZ      |
  7. +-------------+------------+------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT
  11.     ->   ap_paterno, ap_materno,
  12.     ->   (SELECT COUNT(ID_paciente)
  13.     ->    FROM pacientes
  14.     ->    WHERE ap_paterno=ap_paterno AND ap_materno=ap_materno
  15.     ->   ) AS total_Integrantes
  16.     -> FROM pacientes;
  17. +------------+------------+-------------------+
  18. | ap_paterno | ap_materno | total_Integrantes |
  19. +------------+------------+-------------------+
  20. | HERNANDEZ  | PEREZ      |                 2 |
  21. | HERNANDEZ  | PEREZ      |                 2 |
  22. +------------+------------+-------------------+
  23. 2 rows in set (0.00 sec)

Esta consulta te está "duplicando" la información, pero no es porque debas utilizar DISTINCT sino PORQUE NO ESTÁS AGRUPANDO. Checa tu consulta utilizando DISTINCT y la consulta que te propuse, AGRUPANDO.

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   DISTINCT ap_paterno, ap_materno,
  3.     ->   (SELECT COUNT(ID_paciente)
  4.     ->    FROM pacientes
  5.     ->    WHERE ap_paterno=ap_paterno AND ap_materno=ap_materno
  6.     ->   ) AS total_Integrantes
  7.     -> FROM pacientes;
  8. +------------+------------+-------------------+
  9. | ap_paterno | ap_materno | total_Integrantes |
  10. +------------+------------+-------------------+
  11. | HERNANDEZ  | PEREZ      |                 2 |
  12. +------------+------------+-------------------+
  13. 1 row in set (0.00 sec)
  14.  
  15.  
  16. mysql> SELECT ap_paterno, ap_materno, COUNT(*) total_Integrantes
  17.     -> FROM pacientes
  18.     -> GROUP BY ap_paterno, ap_materno;
  19. +------------+------------+-------------------+
  20. | ap_paterno | ap_materno | total_Integrantes |
  21. +------------+------------+-------------------+
  22. | HERNANDEZ  | PEREZ      |                 2 |
  23. +------------+------------+-------------------+
  24. 1 row in set (0.00 sec)

El resultado es el el mismo, PERO LA CONSULTA CON AGRUPACIÓN ES MUCHO MÁS SENCILLA. Lo que tú estás haciendo en realidad son dos consultas, una general y una para obtener el COUNT, pero te repito que no es necesario.

Saludos
Leo.

Etiquetas: vistas
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 06:31.