Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/07/2011, 06:55
arrasia
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: Problema para hayar coincidencias en una tabla

Cita:
Iniciado por vgonga1986 Ver Mensaje
Buenas,

El principal problema que veo es la construcción de la base de datos. Por lo que veo en la consulta que has puesto, tienes una tabla llamada puntos_paisaje que tiene un registro por cada usuario y cada lugar, con la puntuación que le ha asignado. Además, guardas el nick del usuario. Las bases de datos relacionales están optimizadas para consultas de campos llave.

Lo suyo sería crear tres tablas, Paisaje, Usuario y Puntuación. En Paisaje pones un id_paisaje y en usuario un id_usuario. En Puntuanción pones sólo cuatro columnas, id_puntuación (clave primaria), id_paisaje (clave externa), id_usuario (clave externa) y puntuación. Aunque las consultas se van complicando, ya que tienes que hacer consultas a varias tablas en muchas ocasiones, la ganancia de optimización en las búsquedas es brutal y compensa sobremanera.

Si no tienes nociones de bases de datos, no te preocupes, la experiencia te va dando las pistas. Pero te recomendaría que echaras un vistazo a algún manual de diseño de bases de datos, al fin y al cabo son la base de las aplicaciones y el mejor sitio para empezar a optimizar código.

Un saludo, espero que te sirva de algo.

Hola, gracias por tu respuesta.

Ahora mismo existen tres tablas:

tabla_usuarios (campo primario es el nombre del nick que es unico)
tabla_viajes (campo primerio id_viaje)
tabla_puntos (campo primario id_punto, nick, id_viaje y puntos)

Lo unico que nos la tengo relacionadas, simplemente lo controlo con campos unicos y pregunto por ellos en condiciones where. No se si eso es lo correcto o es mejor usar relaciones en este caso.

El problema que veo en lo que os he planteado es el número de consultas, pues de cada usuario que hay en la base de datos tiene que contrastar puntuacion por puntacion para ver si coincide o si hay diferencia.

Al final se generam más de 1000 consultas de una tirada, y supongo que eso no es "optimo", pero no se como hacer una única o intentar que no sean tal barbaridad de numero.


Supongo que optimizar las tablas ganaría más, pero aun asi siendo casi 1000 consultas no tendré el mismo problema? No sería en este caso lo fundamental evitar tener que hacer tantas consultas?

Gracias :)