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

Registros únicos teniendo en cuenta 2 tablas

Estas en el tema de Registros únicos teniendo en cuenta 2 tablas en el foro de Mysql en Foros del Web. Buenas, resulta que tengo una tabla llamada principal con estos campos (estoy simplificando): id (autonum PK) idsender (se puede repetir) type date y otro auxiliar ...
  #1 (permalink)  
Antiguo 23/02/2014, 09:32
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Registros únicos teniendo en cuenta 2 tablas

Buenas,

resulta que tengo una tabla llamada principal con estos campos (estoy simplificando):

id (autonum PK)
idsender (se puede repetir)
type
date


y otro auxiliar con estos campos:

id (PK)
idreceiver (se puede repetir)


la id es la clave que une ambas. He simplificado la estructura para no liaros, pero las tablas tienen que ser tal cual, no se puede cambiar la estructura.

El caso es que estoy buscando cómo seleccionar los registros ÚNICOS de idreceiver que corresponden a un idsender determinado.

Es decir, un idsender=2 puede tener muchos registros en la tabla principal y a su vez varios idreceiver (incluso repetidos) en la tabla auxiliar.

Dicho de otra forma, el idsender puede haber enviado varios artículos a varios idreciver, incluso varios artículos al mismo idreciver.

Lo que voy buscando es seleccionar los idreceiver que han recibido artículos del mismo idsender. Obviamente sin repetir idreceiver. Es decir un mismo remitente a qué destinatarios les ha enviado artículos.

Con la misma idea, en lugar de usar un SELECT, lo que pretendo es contar con COUNT cuántos son esos idreceiver de ese mismo idsender.

He usado SELECT DISTINCT con una tabla pero con 2 unidas por una clave... ni idea
  #2 (permalink)  
Antiguo 23/02/2014, 10:42
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, 4 meses
Puntos: 2658
Respuesta: Registros únicos teniendo en cuenta 2 tablas

Cita:
Lo que voy buscando es seleccionar los idreceiver que han recibido artículos del mismo idsender. Obviamente sin repetir idreceiver. Es decir un mismo remitente a qué destinatarios les ha enviado artículos.
Bueno, no es imposible, pero no con estos esquemas descriptos:
Cita:
principal
id (autonum PK)
idsender
type
date

auxiliar

id (PK)
idreceiver
Ni una ni otra tabla sirven para ese propósito.
Probablemente es que no estás planteando ni las entidades ni las relaciones en una forma limpia.
Si tienes usuarios que envían mensajes a otros mensajes, tienes al menos dos entidades: Usuario y Mensaje. La relación entre ellos se plantea que 1 usuario tiene N mensajes, es decir "un usuario puede enviar N mensajes". Además es receptor de mensajes, por lo que hay una relación que dice "un usuario recibe N mensajes".
Si lo miramos bien, la cosa es que un mismo usuario envía N mensajes a N personas, por lo que es una relacion de cardinalidad muchos a muchos, y eso implica que la administración del mensaje se hace por una tabla independeinte.
Usuario<-usuario_mensaje->Usuario

Básicamente requiere un esquema del tipo:

Cita:
Usuario
usuario_id
nombre
(otros datos)

mensaje_usuario
usuario_sender (FK de usuario)
usuario_reciver (fk de usuario)
fecha
mensaje
Nota: no uses palabra en inglés para los campos. Puedes terminar usando palabras reservadas, lo que dispararía errores de sintaxis de dificil diagnóstico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/02/2014, 03:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Registros únicos teniendo en cuenta 2 tablas

Dejaré al margen las cuestiones de estructura que te ha recomendado gnzsoloyo puesto que parece que no puedes hacer nada al respecto. No he probado esto, pero intenta tú a ver qué sale:
Código MySQL:
Ver original
  1. SELECT t1.idreceiver FROM (SELECT p.idsender, a.idreceiver FROM principal p
  2.  INNER JOIN auxiliar a ON p.id = a.id
  3.  WHERE p.idsender=2)t1 GROUP BY t1.idreceiver

Última edición por jurena; 24/02/2014 a las 06:11

Etiquetas: campo, registro, registros, select, 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:56.