Ver Mensaje Individual
  #7  
Antiguo 04-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Después de hacer alguna que otra prueba, efectivamente, estaba dando una solución equivocada. Cuento un poco el caso, aunque no creo que le pueda servir de mucho a nadie. En definitiva se trataba de mostrar unos registros de cierta tabla de una base de datos. Entonces, como dije arriba, se me ocurrió escribir una clase para que "cargara" cada uno de los registros, de tal modo que pudiera acceder a las instancias de esta clase para obtener los datos necesarios.

Pero, ese planteamiento llevaba a lo siguiente:

1º Se hacía una consulta a la base de datos para averiguar con cuántos registros contaba un determinado usuario. La consulta SQL venía a quedar más o menos así, donde X es un número identificador de cualquier usuario:

Código SQL [-]
SELECT id FROM registros WHERE id_usuario = X

Eso era ya una primera consulta, ahora bien, ¿qué objetivo tiene esa consulta? Conseguir identificadores... conseguir los identificadores de los registros de un determinado usuario. ¿Y qué hacía luego con esos identificadores?

2º Instanciaba un objeto de la clase "Registro", pasando como parámetro en su constructor el identificador de marras, conseguido con la consulta de antes. ¡Pero esto generaba otra nueva consulta a la base de datos! ¿Y para qué? Pues para conseguir los datos del registro en cuestión, del que hasta ahora sabíamos su identificador, nada más.

3º Es en cierto método de la clase "Registro" en donde se hace la correspondiente consulta (y van dos):

Código SQL [-]
SELECT * FROM registros WHERE id = X

Lo que conocemos es la X, desde luego. Observad que se trabaja contra la misma tabla: ambas consultas tratan con la tabla "registros". ¿Qué estaba fallando aquí, para empezar? Pues que para cada identificador logrado con la primera consulta, se tiene que hacer una nueva consulta a la base de datos de modo que consigamos el resto de información necesaria...

Una locura. ¿Porqué? Pues porque podemos librarnos de la clase "Registros" y obtener los datos necesarios con la primera consulta y ninguna más. ¿Cómo? Pues, en lugar de pidiendo el identificador de cada registro, pidiendo todos sus campos, algo así:

Código SQL [-]
SELECT * FROM registros WHERE id_usuario = X

Y puede decirse que no pediremos todos los datos, puesto que utilizaremos el "LIMIT" de SQL, de tal forma que al final se haga una sola consulta que nos devuelva una decena de registros, por ejemplo. De momento, como he dicho, he mandado a freir espárragos a la clase "Registros" y estoy mostrando los datos, directamente, desde el resultado de la primera consulta. Una consulta contra tantas consultas como registros más una... vamos mejorando.

Gracias a todos, de nuevo, por responder. Seguramente sin sus comentarios no hubiera seguido adelante, o, cuando menos, me hubiera constado más darme cuenta de que estaba haciendo las cosas, ya no mal, pero peor.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita