Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/01/2012, 07:55
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 7 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