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

[Ayuda]Consulta Triple !

Estas en el tema de [Ayuda]Consulta Triple ! en el foro de Mysql en Foros del Web. Bueno, primero que nada hola, es el primer tema que abro, osea que soy nuevo en el foro, me registre aca porque es el foro ...
  #1 (permalink)  
Antiguo 16/01/2012, 04:26
 
Fecha de Ingreso: enero-2012
Ubicación: Santa Rosa
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
[Ayuda]Consulta Triple !

Bueno, primero que nada hola, es el primer tema que abro, osea que soy nuevo en el foro, me registre aca porque es el foro que siempre me saca de dudas y decidi entrar a preguntar esto que no encuentro por ningun lado y ya me canse de cometer errores, bueno, tengo 3 tablas: "usuarios", "publicaciones" y "seguidores".

en "Seguidores" tengo: id, seguidor, seguido.

id (el ID, nada que explicar)

seguidor (el ID del usuario que presione sobre el boton "Seguir Usuario")

seguido (el ID del usuario al que le apretaron el boton)

---------

en "Publicaciones" tengo: id_publicacion, contendio, owner.

id_publicacion (el ID)

contenido (el contenido de la publicacion, tipo estados en facebook)

owner (el ID del dueño de la publicacion)

---------

en "users" tengo: id, nombre, apellido

id (el ID)

nombre (el nombre del usuario)

apellido (el apellido del usuario)


-----------------

Bueno lo que quiero ahora es que si el usuario 1 presiona sobre el boton "seguir usuario" del usuario 2, las publicaciones del usuario 2 se vean con el nombre del dueño de esa publicacion y todo, en el usuario 1 algo asi:

SELECT * FROM publicaciones as p INNER JOIN seguidores as s ON s.seguidor = '.$_SESSION[idusuario].' INNER JOIN usuarios as u ON p.owner

el problema con ese codigo es que cuando yo sigo a una persona se ven las publicaciones de las personas que sigue el usuario 2, me explico mejor.

Usuario 1 sigue a Usuario 2

Usuario 2 sigue a Usuario 3

El Usuario 1 ve las publicaciones del Usuario 2 y 3, pero solo sigue al Usuario 2. (Mis publicaciones se incluyen tambien)

Otro problema que tambien tengo es que si sigo a dos personas como mis publicaciones tambien se incluyen, se repiten de nuevo, y asi sucesivamente, gracias por tomarse el tiempo en leer y ayudar :) Saludos !
  #2 (permalink)  
Antiguo 16/01/2012, 07:32
Avatar de andrexsos17  
Fecha de Ingreso: enero-2011
Ubicación: Manizales
Mensajes: 169
Antigüedad: 13 años, 9 meses
Puntos: 15
Respuesta: [Ayuda]Consulta Triple !

Hola,

Primero bienvenido al foro, según lo que comentas y sin llegar a probar creo que te puede servir esta consulta nos comentas que tal.
Código MySQL:
Ver original
  1. SELECT USERS.*, Publicaciones.* FROM USERS JOIN Seguidores ON USERS.id = Seguidores.seguidor  JOIN Publicaciones ON Seguidores.seguido = Publicaciones.owner  WHERE USERS.id='.$_SESSION[idusuario].'

Saludos!!!
__________________
Todo problema es una forma mental que la mente sostiene. Los problemas dejan de existir cuando los olvidamos. Todo problema ha sido creado por la mente y existe mientras la mente lo sostenga.
  #3 (permalink)  
Antiguo 16/01/2012, 07:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: [Ayuda]Consulta Triple !

Si te he entendio... te voy a intentar hacer ver la dificultad del tema y finalmente NO te dare una solucion...

Supogamos que el usuario actual es X y X esta guardado en $_SESSION[idusuario]

Código MySQL:
Ver original
  1. SELECT * FROM publicaciones as p INNER JOIN users u ON p.owner=u.id WHERE p.owner=$_SESSION[idusuario]
Esto da las publicaciones de X

Código MySQL:
Ver original
  1. SELECT s.seguido FROM Seguidores s  WHERE s.seguidor=$_SESSION[idusuario];

Esto da los usuarios seguidos (directamente) por X luego

Código MySQL:
Ver original
  1. SELECT * FROM publicaciones as p INNER JOIN users u ON p.owner=u.id WHERE p.owner=$_SESSION[idusuario] or p.owner IN
  2. (SELECT s.seguido FROM Seguidores s  WHERE s.seguidor=$_SESSION[idusuario]);

nos dara la publicaciones de X y de todos los usuarios que X sigue directamente.

Hasta aqui era facil apartir de aqui es un tema de recursividad si quieres que vea las publicaciones de los usuarios seguidos por no por X sino por los usuarios seguidos por X.

Código MySQL:
Ver original
  1. SELECT DISTINCT s.seguido FROM Seguidores s
  2. WHERE s.seguidor IN (SELECT s.seguido
  3.                               FROM Seguidores s  
  4.                               WHERE s.seguidor=$_SESSION[idusuario]);

esto nos da los usuarios seguidos por los ususarios seguidos por X (seguidos indirectamente en un primer nivel de recursividad)

Código MySQL:
Ver original
  1.   FROM publicaciones as p INNER JOIN users u ON p.owner=u.id
  2.   WHERE p.owner=$_SESSION[idusuario]
  3.        OR p.owner IN (SELECT s.seguido FROM Seguidores s
  4.                         WHERE s.seguidor=$_SESSION[idusuario]
  5.                      UNION DISTINCT
  6.                      SELECT DISTINCT s.seguido
  7.                         FROM Seguidores s
  8.                         WHERE s.seguidor IN (SELECT s.seguido
  9.                                                  FROM Seguidores s  
  10.                                                  WHERE s.seguidor=$_SESSION[idusuario]));

Esto nos dara las publicaciones propia s X las de los seguidos directamente y las de los seguidos indirectamente en el primer nivel de recursividad.

Como puedes ver esto se hace infinito....

Yo la solución la buscaria a nivel de programación externa y de consultas mas simples...

X debe ver la publicaciones propias y las de los que ha decidido seguir directamente, y poder elegir ver a quien sigue cada uno de sus seguidos, y luego que elija a quien quiere ver... no se si me explico.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 16/01/2012 a las 08:07
  #4 (permalink)  
Antiguo 16/01/2012, 20:04
 
Fecha de Ingreso: enero-2012
Ubicación: Santa Rosa
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: [Ayuda]Consulta Triple !

@quimfv era justamente lo que buscaba, muchisimas gracias ! en verdad me salvaste de una grande, vengo intententando hacer eso hace rato u.u muchisimas gracias nuevamente :)

@andrexsos17 gracias a ti tambien porque era mostraba casi lo mismo, pero el codigo de quimfv mostraba exactamente lo que queria, muchas gracias a los dos :D
  #5 (permalink)  
Antiguo 17/01/2012, 11:28
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: [Ayuda]Consulta Triple !

Solo como acotación y la verdad no tiene mucho que ver con responderte, porque creo que ya lo hicieron xD, la tabla seguidores no require un ID extra xD!

pues es una relación explicita entre usuarios :X
El identificador debería ser el conjunto [seguidor,seguido], digo, la verdad me metí y fue lo primero que note :P, a menos claro que id_seguidores sea utilizado como FK en otra tabla

saludos y perdón por meterme con tu diseño xD!
  #6 (permalink)  
Antiguo 17/01/2012, 15:12
 
Fecha de Ingreso: enero-2012
Ubicación: Santa Rosa
Mensajes: 7
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: [Ayuda]Consulta Triple !

@Ribon sabes que tenes razon? lo habia puesto para despues poder utilizar el ultimo ID, para hacer una estadistica de cuantos seguimientos se iban haciendo, pero con (count) se puede hacer eso sin necesidad de un ID, muchas gracias por notarlo :)

Etiquetas: join, select, tabla, triple
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 12:28.