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

[SOLUCIONADO] Cómo puedo mejorar mi consulta a la base de datos ?

Estas en el tema de Cómo puedo mejorar mi consulta a la base de datos ? en el foro de Bases de Datos General en Foros del Web. Hola mis bellos, tengo una duda, no sé si será algo obvio, pero la verdad lo ignoro, les cuento: Tengo una tabla de relaciones, en ...
  #1 (permalink)  
Antiguo 13/04/2016, 20:38
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Pregunta Cómo puedo mejorar mi consulta a la base de datos ?

Hola mis bellos, tengo una duda, no sé si será algo obvio, pero la verdad lo ignoro, les cuento:
Tengo una tabla de relaciones, en donde tengo la informacion de un aula de clases de una escuela y en la actualidad estoy haciendo TRES consultas para poder buscar toda la info en cada una de las tablas, mi pregunta es: EXISTE ALGUNA MANERA DE RESUMIR MIS TRES CONSULTAS ACTUALES A UNA SOLA?

Aqui les dejo mis tablas y mis consultas actuales:

TABLA DE RELACIONES:
id_relaciones
id_aula_asignada
id_nivel
id_grado
id_seccion
TABLA DE NIVELES: id_nivel, nombre
TABLA DE GRADOS: id_grado, nombre
TABLA DE SECCIONES: id_seccion, nombre

MIS CONSULTAS:
Código SQL:
Ver original
  1. // -------------------------
  2. // Consulta nivel que imparte (Maternal / Prescolar / Primaria / Secundaria)
  3. SELECT * FROM tabla_niveles
  4. WHERE (id_nivel = '$aula_asignada[id_nivel]') LIMIT 1;
  5. // -------------------------
  6. // Consulta el grado que imparte  
  7. SELECT * FROM tabla_grados
  8. WHERE (id_grado = '$aula_asignada[id_grado]') LIMIT 1;
  9. // -------------------------
  10. // Consulta la sección que imparte
  11. SELECT * FROM tabla_secciones
  12. WHERE (id_seccion = '$aula_asignada[id_seccion]') LIMIT 1
;

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
Luego de estas consultas puedo imprimir en pantalla algo como: el estudiante cursa en PRIMARIA, el 3ER grado, en la seccion A
EXISTE ALGUNA MANERA DE RESUMIR MIS TRES CONSULTAS ACTUALES A UNA SOLA?
++

Última edición por gnzsoloyo; 14/04/2016 a las 05:32 Razón: Codigo de programación no permitido en foros de BBDD
  #2 (permalink)  
Antiguo 14/04/2016, 00:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Primero una sugerencia, evitate la zalameria, de todos modos se te ayuda ;), ahora para lo que quieres se puede hacer con una sola consulta usando inner join, algo como esto:


Código MySQL:
Ver original
  1. select * from relaciones as t1
  2. inner join niveles as t2 on (t1.id_nivel=t2.id_nivel)
  3. inner join grados as t3 on (t1.id_grado=t3.id_grado)
  4. inner join secciones as t4 on (t1.id_grado=t4.id_grado)


Ahora es posible que esta consulta te arroje resultados "repetidos" esos los evitarias agregando el respectivo where al final de tu consulta :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/04/2016, 05:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Estimada:
Además de la solución que te aporta Libras (y muy especialmente su consejo) resulta funcionalmente correcta, con la mejor optimización, hay un tema que tienes que tener muy presente en el ejemplo de la BBDD que nos estás mostrando: Está MAL DISEÑADA.
Estás usando una unica entidad para realizar la relación completa entre varias tablas, cuando las dependencias funcioanles nos dicen otra cosa compeltamentte diferente.
El modelo que deseas construir es un caso de estudio habitual en los primeros trabajos prácticos en la asignatura de Base de Datos, y puedo aseguarte que está muy mal analizado.
Si se trata de un modelo para un trabajo práctico, tienes el fallo asegurado, y si es en un entorno productivo... bueno, veo altas probabilidades de inconsistencias, y consultas con muy mala optimización.

Yendo al pedido puntual que haces en tu post, la solución de Libras es la mejor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 14/04/2016, 11:53
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Ummm les comento, mis disculpas por la "zalameria" soy así ;).
Les cuento ejecute su recomendacion del SELECT y me funciono a las mil maravillas, GRACIAS. Acerca del diseño de mi BBDD, gracias por avisarme, ya voy a buscar quien me pueda apoyar en este punto para no tener errores en el futuro con mi aplicación. Si me puedes recomendar alguna página o documentación (para humanos normales) mucho te lo agradecería. Bye

Última edición por julia2021; 14/04/2016 a las 13:54
  #5 (permalink)  
Antiguo 14/04/2016, 16:45
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Pregunta Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Ahora tengo otro problema con la misma consulta que me recomendaron, funciona muy bien, sin embargo en su resultado me arroga tres columnas que se llaman de la misma manera, esto se debe a que en las tres tablas existe una columna denominada "nombre", pero en el resultado de esta consulta me devuelve tambien esas tres columnas que se llaman igual.
Cómo debo hacer para crearlas con distintos nombres?
La consulta la estoy realizando de la siguiente manera:
Código PHP:
select from relaciones as t1
inner join niveles 
as t2 on (t1.id_nivel=t2.id_nivel)
inner join grados as t3 on (t1.id_grado=t3.id_grado)
inner join secciones as t4 on (t1.id_seccion=t4.id_seccion
y mis tablas son:
TABLA DE RELACIONES: id_relaciones, id_aula_asignada, id_nivel, id_grado, id_seccion
TABLA DE NIVELES: id_nivel, nombre
TABLA DE GRADOS: id_grado, nombre
TABLA DE SECCIONES: id_seccion, nombre

Ahora necesito usar el valor de cada columna, pero como tengo tres columnas denominadas "nombre", siempre obtengo el valor de la última columna.
Cómo debo hacer para crearlas con distintos nombres en el resultado de la consulta? o como debo llamarlas para distinguirlas una de la otra?
  #6 (permalink)  
Antiguo 15/04/2016, 09:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Código SQL:
Ver original
  1. SELECT t2.nombre AS nombre_nivel, t3.nombre AS nombre_grade, t4.nombre AS nombre_seccion FROM relaciones AS t1
  2. INNER JOIN niveles AS t2 ON (t1.id_nivel=t2.id_nivel)
  3. INNER JOIN grados AS t3 ON (t1.id_grado=t3.id_grado)
  4. INNER JOIN secciones AS t4 ON (t1.id_seccion=t4.id_seccion)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 16/04/2016, 21:13
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Respuesta: Cómo puedo mejorar mi consulta a la base de datos ?

Funciono OK. Mil Gracias !!!!!!

Etiquetas: query, select, tablas
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 00:14.