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

Optimizar una cosulta para saber los Amigos en Comun

Estas en el tema de Optimizar una cosulta para saber los Amigos en Comun en el foro de Bases de Datos General en Foros del Web. Buenos dias. tengo un pequeño problema para un trabajo de la universidad, tengo que hacer un algoritmo para ver los amigos en comun optimizado, eficiente ...
  #1 (permalink)  
Antiguo 30/07/2010, 21:19
 
Fecha de Ingreso: julio-2010
Mensajes: 2
Antigüedad: 13 años, 7 meses
Puntos: 0
Optimizar una cosulta para saber los Amigos en Comun

Buenos dias.

tengo un pequeño problema para un trabajo de la universidad, tengo que hacer un algoritmo para ver los amigos en comun optimizado, eficiente y rapido.

mis tabla amigos es asi

| ID | Amigo1_ID | Amigo2_ID | Status |

* si el estatus es 1 es que amigo2id acepto la amistad propuesta por Amigo1_id, estoy usando una consulta parecida a esta

Código:
select IDamigo from amigos where IDPersona = 2 and IDamigo in (select IDamigo from amigos where IDPersona =1);
pero esta consulta si usuario1 tiene 1000 amigos e usuario2 tiene otros 1000 tendria que hacerse 1000 x 1000 iteraciones.

talvez alguien sabe como optimizarla o como manejar la base de datos para que las consultas sean sencillas. no me importa restructurar todo

esperando gentilmente sus respuestas me despido y agradesco
  #2 (permalink)  
Antiguo 01/08/2010, 04:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Optimizar una cosulta para saber los Amigos en Comun

Debes tener indexados los campos AMIGO1_ID y AMIG02_ID, es decir,haber creado un índice INDEX de cada uno de esos campos.

Código MySQL:
Ver original
  1. SELECT AMIGO1_ID FROM amigos WHERE (AMIGO2_ID = 2 AND STATUS=1)
  2.  INNER JOIN (SELECT AMIGO1_ID
  3.  FROM amigos WHERE (AMIGO2_ID = 1 AND STATUS=1))t1
  4.  ON amigos.AMIGO1_ID = t1.AMIGO1_ID
Esto te devolverá, creo, los números de ID de los amigos coincidentes aceptados por el AMIGO2_ID = 2 y por el AMIGO2_ID = 1. Los nombres propios hay que sacarlos mediante otro INNER JOIN, pero en este caso con la tabla donde tienes los datos de las personas. Para eso deberías decirnos la estructura de la tabla que tiene los nombres con sus campos.

Última edición por jurena; 02/08/2010 a las 03:48

Etiquetas: comun, cosulta
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 03:58.