Ver Mensaje Individual
  #23 (permalink)  
Antiguo 20/09/2012, 04:50
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 17 años
Puntos: 300
Respuesta: Select para 3 tablas.

algunas preguntas:
¿qué motor de tablas usas, InnoDB o MyIsam?
Si usas MyIsam, ¿tienes indexados los FK, es decir, esos, nsuario, num_usuario, y usuario, excepto el usuario de la tabla usuario, pues imagino que ese lo tendrás como PK.

USUARIO ---> NU_USUARIO

AP_USUARIOS-----> NU_USUARIO

AVISOS--------> NUM_USUARIO

DIR_USUARIOS-----> USUARIO

Si los indexas, ganarás en velocidad.

El otro problema que veo es que quieres tener la posibilidad de buscar por población, teléfono y nombre. El campo donde va el nombre, el teléfono y población también deberían ir indexados, pero es que además deberías configurar la consulta dependiendo de lo que se pida, sea nombre solamente, (lo que podría arrastrar varias direcciones), teléfono, y población. La población es de direcciones, mientras que teléfono es de usuario. Si solo pasas un parámetro para teléfono, deberías buscar sólo en la tabla usuario; Si la población forma parte de la consulta, tendrás que relacionar con dir_usuarios, pero ojo, un usuario podría tener dos direcciones distintas en la misma localidad (si el detalle de cada dirección no importa, no hay problema, pues te traes el identificador del usuario, pero si quieres poner todas las direcciones, el group by por nsuario, no te dejará. Yo, en tu caso, armaría consultas distintas de acuerdo con los valores pasados por POST. Danos los datos de las consultas según 1, 2 o 3 parámetros y qué querrías mostrar. Nosotros te orientaremos sobre esas posibles consultas y en el foro PHP lo harán sobre los demás aspectos. Dinos también si querrás mostrar otros datos, porque una vez sacado el num podríamos hacer subconsultas sobre los demás datos que quizás mejoraran esos LEFT JOIN de todas las tablas con todos los campos. Primero nos traemos los 2, 5 o 10 datos de la consulta y con subconsulta le añadimos lo demás.