Foros del Web » Programando para Internet » PHP »

Amigo de mis amigos (Amigos en comun)

Estas en el tema de Amigo de mis amigos (Amigos en comun) en el foro de PHP en Foros del Web. Hola creo que me hice un lió donde no se salir, tengo que mostrar el numero de amigos en común que tiene cada usuario al ...
  #1 (permalink)  
Antiguo 24/03/2010, 00:43
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
De acuerdo Amigo de mis amigos (Amigos en comun)

Hola creo que me hice un lió donde no se salir, tengo que mostrar el numero de amigos en común que tiene cada usuario al comienzo la idea era fácil pero o bien me e echo un lió o bien esta mas complicado de lo que pensaba pero me metí en un atolladero del cual no se salir.

Necesito mostrar los amigos en común que tienen el numero de amigos en común, la tabla mysql esta así montada.

id id_usuario id_amigo aprobado
13 21 17 1
16 20 12 1
10 20 17 1
14 17 21 1
11 17 16 1
9 17 20 1
1 17 12 0
12 16 17 1
7 12 10 1
2 12 17 0
15 12 20 1
8 10 12 1

Bien ejemplo:
17 agrega a 12 aprobado 1
12 agrega a 17 aprobado 1


Como mirar los amigos que tienen en común 17 con 12 aquí es donde me lié parece simple pero no lo es por lo menos no veo el camino simple ando dando por por aquí pero no me anda bien. SENTENCIA

Código PHP:
$consulta $db->consulta("SELECT a.id_usuario AS Amigo_1, b.id_usuario AS Amigo_2, b.id_amigo AS Amigo_en_común FROM amigos a LEFT JOIN amigos b ON (a.id_amigo=b.id_usuario AND a.id_usuario!=b.id_amigo AND b.id_amigo=(SELECT id_amigo FROM amigos WHERE id_usuario='".$_SESSION['id']."' AND id_amigo=b.id_amigo )) WHERE a.id_usuario ='".$amigo."' AND a.aprovado = 1 AND b.aprovado = 1");
    
    return 
$total_resultados $db->cuenta($consulta); 
No hay forma a alguien se le ocurre algo?

gracias!
__________________
Si la vida te da la espalda tocale el culo
  #2 (permalink)  
Antiguo 24/03/2010, 01:33
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 8 meses
Puntos: 326
Respuesta: Amigo de mis amigos (Amigos en comun)

Código PHP:

$sql 
"SELECT * FROM amigos a WHERE a.id_usuario=17 AND a.id_amigo IN(SELECT b.id_amigo FROM amigo b WHERE b.id_usuario=12)"
Yo creo que sería algo así. Eso si, el tema es de SQL (si he entendido bien :)
  #3 (permalink)  
Antiguo 24/03/2010, 02:10
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
Respuesta: Amigo de mis amigos (Amigos en comun)

eso tira error SQL


Error
consulta SQL:

SELECT *
FROM amigos a
WHERE a.id_usuario =17
AND a.id_amigo
IN (


SELECT b.id_amigo
FROM amigos b
WHERE b.id_usuario =12
LIMIT 0 , 30
MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
__________________
Si la vida te da la espalda tocale el culo
  #4 (permalink)  
Antiguo 24/03/2010, 02:25
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 8 meses
Puntos: 326
Respuesta: Amigo de mis amigos (Amigos en comun)

Te falta un ) antes del limit º.º

Pero la idea no era darte una sentencia sql 100% correcta (ni siquiera pilla los datos 12 y 17 dinámicos) sino una idea (en este caso, la cláusula IN). Yo te lo he dicho de memoria, sin probar nada >.<
  #5 (permalink)  
Antiguo 24/03/2010, 02:26
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
Respuesta: Amigo de mis amigos (Amigos en comun)

No hay ningun limit en la consulta de Eleazan

SELECT * FROM amigos a WHERE a.id_usuario=17 AND a.id_amigo IN(SELECT b.id_amigo FROM amigo b WHERE b.id_usuario=12)
__________________
Si la vida te da la espalda tocale el culo
  #6 (permalink)  
Antiguo 24/03/2010, 02:34
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 8 meses
Puntos: 326
Respuesta: Amigo de mis amigos (Amigos en comun)

La segunda tabla está mal escrita, sería "amigos" no "amigo" (o bien, la primera!)
  #7 (permalink)  
Antiguo 24/03/2010, 02:36
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
Respuesta: Amigo de mis amigos (Amigos en comun)

si ya lo probé pero no funciona
__________________
Si la vida te da la espalda tocale el culo
  #8 (permalink)  
Antiguo 24/03/2010, 02:38
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 8 meses
Puntos: 326
Respuesta: Amigo de mis amigos (Amigos en comun)

Pues revisalo, pq he probado esta consulta
Código:
SELECT * FROM amigos a WHERE a.id_usuario=17 AND a.id_amigo IN(SELECT b.id_amigo FROM amigos b WHERE b.id_usuario=12)
Tal cual, en mysql query browser, con una tabla creada como la tuya (mismos datos, aunq sin el campo de aprobado, pero eso no cambia nada!) y funciona >.<
  #9 (permalink)  
Antiguo 24/03/2010, 03:13
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
Respuesta: Amigo de mis amigos (Amigos en comun)

te agradezco muchísimo tu interés y tu dedicación pero a mi me tira esto.


Error
consulta SQL:

SELECT *
FROM amigos a
WHERE a.id_usuario =17
AND a.id_amigo
IN (


SELECT b.id_amigo
FROM amigos b
WHERE b.id_usuario =12
LIMIT 0 , 30
MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

por que puede ser?
__________________
Si la vida te da la espalda tocale el culo
  #10 (permalink)  
Antiguo 24/03/2010, 03:16
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 8 meses
Puntos: 326
Respuesta: Amigo de mis amigos (Amigos en comun)

Por la clase que tienes de conexion a la bbdd. Hace un limit, y al parecer quita un parentesis :S

Puedes poner el código donde haces la consulta?
  #11 (permalink)  
Antiguo 24/03/2010, 03:26
 
Fecha de Ingreso: abril-2003
Mensajes: 587
Antigüedad: 21 años, 7 meses
Puntos: 5
Respuesta: Amigo de mis amigos (Amigos en comun)

Listo funciona perfecto muchas gracias tio!
__________________
Si la vida te da la espalda tocale el culo

Etiquetas: comun
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 21:21.