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

Resultados dependientes de 2 tablas

Estas en el tema de Resultados dependientes de 2 tablas en el foro de Mysql en Foros del Web. Empelotado, asi ando... Tengo 2 tablas: registros id - userid registros_acciones parentid (es el id de la tabla registros) - userid necesito mostrar los registros ...
  #1 (permalink)  
Antiguo 21/02/2014, 10:21
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Exclamación Resultados dependientes de 2 tablas

Empelotado, asi ando...

Tengo 2 tablas:
registros
id - userid

registros_acciones
parentid (es el id de la tabla registros) - userid

necesito mostrar los registros que tengan un userid que tomo por GET, suponiendo que el userid sea 13, necesito los registros con ese valor tanto en registros como en acciones, intento esto pero no me funciona, da resultados incongruentes:

Código MySQL:
Ver original
  1. SELECT r.*, a.userid as uid, a.id as aid
  2. FROM registros AS r INNER JOIN registros_acciones AS a
  3. ON r.site=4 and r.status>0 AND r.new=0 and a.status>=0 and (r.userid IS NULL or r.userid=13 or a.userid=13)
  4. GROUP BY r.email
  5. ORDER BY r.new DESC, r.id DESC

__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO

Última edición por gnzsoloyo; 21/02/2014 a las 10:32
  #2 (permalink)  
Antiguo 21/02/2014, 10:36
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: Resultados dependientes de 2 tablas

Código MySQL:
Ver original
  1. SELECT r.*, a.userid as uid, a.id as aid
  2. FROM registros r LEFT JOIN registros_acciones a ON r.userid=a.userid
  3. WEHRE r.site=4
  4.     AND r.status>0
  5.     AND r.new=0
  6.     AND a.status>=0
  7.     AND (r.userid=13  OR r.userid IS NULL)
  8. GROUP BY r.email
  9. ORDER BY r.new DESC, r.id DESC
Necesitas mejorar la sintaxis del INNER JOIN. Lo único que no pusiste es una condición de ON corecta. Era un pastiche de cosas en el lugar incorrecto.
__________________
¿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 21/02/2014, 10:41
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Respuesta: Resultados dependientes de 2 tablas

pero esa consulta solo mostrara los campos que tengan igual el userid? yo necesito que se sumen, es decir, que sea 13 o en una o en otra (o en ambas)
__________________
CreandoWebs.com
www.creandowebs.com
PLANTILLAS TEMPLATEMONSTER CON 10% DE DESCUENTO
  #4 (permalink)  
Antiguo 21/02/2014, 11:16
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: Resultados dependientes de 2 tablas

Cita:
Iniciado por sjam7 Ver Mensaje
pero esa consulta solo mostrara los campos que tengan igual el userid? yo necesito que se sumen, es decir, que sea 13 o en una o en otra (o en ambas)
Y para qué supones que pongo el
Código MySQL:
Ver original
  1. AND (r.userid=13  OR r.userid IS NULL)
en el WHERE?

Partamos de la base que si ambas tablas se relacionan, es por el userid, y por tanto ese campo obligatoriamente deben indicarse en el ON. AL menos, la relación se infiere de que la segunda tabla se llame "registros_acciones", por lo que debe haber una tabla acciones relacionada con registros. Pero eso implica que es imposible que haya un registro en "registros_acciones" que no exista en "registro". Si la hubiera, tendrías una inconsistencia brutal, un gravísimo error de diseño, o una definición absurda de reglas de negocio.
Si eso no ha quedado claro, revisa de nuevo los apuntes y el manual de referencia. Esa es la forma en que se relacionan dos tablas por INNER JOIN.
Ahora bien, lo que tu planteabas implicaba buscar un userid de la segunda tabla que debía ser 13, o bien nulo, pero es es imposible en un INNER JOIN, porque la relación debe existir si o sí. Para poder cumplir con esa condición debe usar LEFT JOIN, y en ese caso alcanza con poner la condición como te lo puse arriba.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/02/2014, 11:18
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Respuesta: Resultados dependientes de 2 tablas

la relacion es el id y parentid, el userid es el que se debe cumplir o en una tabla o en la otra
  #6 (permalink)  
Antiguo 21/02/2014, 11:20
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: Resultados dependientes de 2 tablas

Cita:
Iniciado por sjam7 Ver Mensaje
la relacion es el id y parentid, el userid es el que se debe cumplir o en una tabla o en la otra
Como dije, esa relación entonces está muy mal diseñada.

Explica mejor en qué consiste el modelo y cómo es posible que existan dos tablas que "pueden o no estar relacionadas". Hay algo allí que está mal.
__________________
¿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 21/02/2014, 11:32
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Respuesta: Resultados dependientes de 2 tablas

es una tabla que va guardando unos registros que se le asignan a un usuario en la tabla registros en el campo userid, pero ademas existe una tabla de acciones (registros_acciones) que incluyen un parentid relacionado al id de la tabla registros y que también tiene un campo userid, lo que quiero es mostrar todos los registros asignados a un usuario (registros - userid) pero ademas agregar los registros que tengan una acción (registros_acciones) de ese mismo usuario.

ojala me haya explicado un poco mejor
  #8 (permalink)  
Antiguo 21/02/2014, 11:48
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: Resultados dependientes de 2 tablas

Básicamente es lo que supuse:
usuarios<-registros<-registros_acciones-> acciones.

En ese contexto, según tu propia descripción, no puede existir ningún registro de "registros" que no pertenezca a un usuario, ni registros en "registros_acciones" que no se relacione con "registros", y tampoco que no se relacionen con "acciones".
Lo que sí puede existir es un registro de "regsitros" que no se relacione con acciones, para lo cual no debería estar en "registros_acciones" .

¿Se entiende esa idea?

En ese contexto, la query que te paso es correcta.

¿La probaste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 21/02/2014, 16:39
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Respuesta: Resultados dependientes de 2 tablas

Muchas gracias, hice algunos pequeños cambios y parece que ya quedo, obvio gracias a tu ayuda

Etiquetas: join
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 02:57.