Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/07/2011, 08:33
arrasia
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 17 años, 1 mes
Puntos: 6
Respuesta: Problema para hayar coincidencias en una tabla

Tabla lugares
---------------
idlugar
nombre
ciudad
...



Tabla usuario
---------
usernick
email
pais
ciudad
passwrd
....



tabla puntos_paisaje
----------------------------
id_puntuacion
idlugar
usernick
puntos



Esto es la estructura básica que está implicada, pero como te decía no tienen relaciones, simplemente lso campos subrayados son claves e unicos. En verdad todas las consultas (como puedes ver en el codigo que puse antes) se hacen sobre puntos_paisaje.

Lo que necesito es saber que usuarios puntuan los paisajes lo más parecido posible, para ello sigo el siguiente criterio:

Si coincide la votacion le doy 2 puntos
Si difiere 1 punto (por arriba o por abajo) le doy 1 punto
Si difiere 2 o 3 puntos (por arriba o por abajo) le doy 0.5 puntos
Si difere 4 le recto -0.5 puntos
Si difiere más de 4 le recto -1 punto

El resultado se divide por el nº de paisajes que han coincidido en puntuar, lo multiplico por 100 y ya tengo el porcentaje

EL problema es que para ello necesito que yo como usuario, la base de datos contracte TODAS LAS NOTAS suyas con TODAS LAS PUNTUACIONES DE CADA UNO DE LOS USUARIOS de la base de datos. Para que sea efectivo esto lo limito a 50, es decir que para que un usuario sea analizado tiene que haber puntuado al menos 50 paisajes.


El problema es que 900 usuarios con más de 50 puntuaciones, eso multiplica TODAS LAS PUNTUACIONES del usuario que busca a los usuarios coincidentes por los 900 usuarios multipolicado por sus puntuaciones

Esto genera (al menos como lo tengo diseñado másd e 1000 consultas y no se como hacer para reducilo ya sea con inner join left join o cualquier otra formala