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

no repetir registros de distintas tablas

Estas en el tema de no repetir registros de distintas tablas en el foro de Mysql en Foros del Web. Buenas tengo una base de datos en mysql con varias tablas con ediciones y dentro de estas autores que se repiten en distintas ediciones. me ...
  #1 (permalink)  
Antiguo 29/02/2012, 09:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
no repetir registros de distintas tablas

Buenas
tengo una base de datos en mysql con varias tablas con ediciones y dentro de estas autores que se repiten en distintas ediciones.
me gustaria que me mostraria los autores que estan dentro de ellas pero sin repetirse.

ejemplo base datos
edicion uno (nombreautoruno, nombreautordos, nombreautortres)
edicion dos (nombreautoruno, nombreautordos)
edicion tres(nombreautordos, nombreautortres)
edicion cuatro(nombreautoruno,nombreautordos)

Quisiera conseguir todos los autores sin que se repitan
Ej
nombreautoruno
nombreautordos
nombreautortres

en vez de:
nombreautoruno
nombreautordos
nombreautortres
nombreautoruno
nombreautordos
nombreautordos
nombreautortres
nombreautoruno
nombreautordos

he intentado varias cosas como distinct union pero no hay manera, si alguien puede orientar gracias
  #2 (permalink)  
Antiguo 29/02/2012, 09:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: no repetir registros de distintas tablas

Hola paik:

No me quedó clara la forma en que tienes organizadas tus tablas. ¿tienes una tabla para ediciones y otra para autores o sólo una tabla ediciones con un campo autores que puede ser multivaluado?

De primera, la respuesta que me vino a la mente sería justamente la de hacer un distinct, sería conveniente que nos digas qué es lo que haz intentado hacer, igual y sólo es cuestión de afinar un poco tu consulta.

Saludos
Leo.
  #3 (permalink)  
Antiguo 29/02/2012, 09:55
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: no repetir registros de distintas tablas

gracias por la respuesta, las tablas son las ediciones y dentro de estas tablas tengo un campo en el que entran los nombres de autor he probado muchas consultas pero una de ellas es
Select autor from edicionuno distinct union select autor from ediciondos....
  #4 (permalink)  
Antiguo 29/02/2012, 10:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: no repetir registros de distintas tablas

Hola de nuevo:

Una de las características de la UNION, es que si no le pones el atributo ALL (UNION ALL) TE ELIMINA LOS REGISTROS DUPLICADOS, es decir, según yo no tendrías que hacer nada extra, sólo la unión normal... Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM edicion_uno;
  2. +-----------------+
  3. | autor           |
  4. +-----------------+
  5. | nombreautoruno  |
  6. | nombreautordos  |
  7. | nombreautortres |
  8. +-----------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM edicion_dos;
  12. +----------------+
  13. | autor          |
  14. +----------------+
  15. | nombreautoruno |
  16. | nombreautordos |
  17. +----------------+
  18. 2 rows in set (0.00 sec)
  19.  
  20. mysql> SELECT * FROM edicion_tres;
  21. +-----------------+
  22. | autor           |
  23. +-----------------+
  24. | nombreautordos  |
  25. | nombreautortres |
  26. +-----------------+
  27. 2 rows in set (0.00 sec)
  28.  
  29. mysql> SELECT autor FROM edicion_uno
  30.     -> UNION
  31.     -> SELECT autor FROM edicion_dos
  32.     -> UNION
  33.     -> SELECT autor FROM edicion_tres;
  34. +-----------------+
  35. | autor           |
  36. +-----------------+
  37. | nombreautoruno  |
  38. | nombreautordos  |
  39. | nombreautortres |
  40. +-----------------+
  41. 3 rows in set (0.00 sec)


Observa que la unión me regresa SÓLO TRES AUTORES ya que los registros duplicados no aparecen. Si utilizas la cláusula ALL entonces sí te aparecen registros duplicados.

Código MySQL:
Ver original
  1. mysql> SELECT autor FROM edicion_uno
  2.     -> UNION ALL
  3.     -> SELECT autor FROM edicion_dos
  4.     -> UNION ALL
  5.     -> SELECT autor FROM edicion_tres;
  6. +-----------------+
  7. | autor           |
  8. +-----------------+
  9. | nombreautoruno  |
  10. | nombreautordos  |
  11. | nombreautortres |
  12. | nombreautoruno  |
  13. | nombreautordos  |
  14. | nombreautordos  |
  15. | nombreautortres |
  16. +-----------------+
  17. 7 rows in set (0.02 sec)

Si entendí mal el modelo de tus datos, por favor trata de aclarar mejor cómo están tus tablas y tus datos. Haz la prueba y nos comentas.

Saludos
Leo.
  #5 (permalink)  
Antiguo 29/02/2012, 11:40
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: no repetir registros de distintas tablas

Muchas gracias leo, lo he probado y funciona.
el problema me viene de que las tablas de las ediciones las muestro con un while y las convertia en la variable $ediciones la consulta es:
select autor from $ediciones
¿hay alguna forma de ponerle el Union a la variable ?

en vez de tener que hacer la consulta(que de esta forma si consigo lo que quiero)
select autor from edicionuno union select autor from ediciondos


sigo probando cosas, gracias
  #6 (permalink)  
Antiguo 01/03/2012, 11:07
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: no repetir registros de distintas tablas

Sigo intentando con esto y no doy con la solución , metiendo a mano el select con union a todas ediciones consigo los resultados de la manera que busco de esta forma
Código SQL:
Ver original
  1. SELECT autor FROM edicion_uno UNION SELECT autor FROM edicion_dos
pero las ediciones se añaden automaticamente entonces queria conseguirlo con variables para ello utilizo este codigo para listar tablas de la base datos y seguido hacer la consulta pero de esta forma se me repiten los datos de autor
Código PHP:
Ver original
  1. @mysql_select_db("bd_ediciones") or die( "Imposible seleccionar base de datos");
  2. $result = mysql_list_tables("bd_ediciones");
  3. if (!$result) {
  4.         echo "DB Error, No se pueden listar las tablas";
  5.         echo "
  6. ";
  7.         echo 'MySQL Error: ' . mysql_error();
  8. }
  9. while ($registro = mysql_fetch_array($result)) {
  10.  
  11. $ediciones = $registro[0];
  12.      
  13.  
  14. //montar consulta
  15. $sql_select = mysql_query("SELECT * FROM $ediciones ORDER BY autor ASC");
  16. while ($registro =mysql_fetch_array($sql_select))
  17. {
  18.  
  19. $autor = $registro['autor'];
  20.  
  21.  
  22.  
  23. ?>
  24. <?php echo $autor;?>
  25. <?php
  26. }
  27. }
  28. ?>
gracias por la ayuda. espero que se entienda

Etiquetas: distintas, registros, repetir, sql, tabla, tablas
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 16:43.