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

que opinan de esta query??

Estas en el tema de que opinan de esta query?? en el foro de Mysql en Foros del Web. $query = "SELECT suministro_union.sap, periodo_suministro.periodo, suministro_union.nombre, distribuidora.nombre AS distribuidora, periodo_suministro.id_suministro, requerimiento_estado_periodo_suministro_cantidad.c liente, requerimiento_estado_periodo_suministro_cantidad.g estor, requerimiento_estado_periodo_suministro_cantidad.t erceros, requerimiento_estado_periodo_suministro_cantidad.c errado FROM (( (SELECT periodos.periodo, suministro_union.id_suministro FROM periodos, ...
  #1 (permalink)  
Antiguo 16/02/2012, 10:24
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 9 meses
Puntos: 2
que opinan de esta query??

$query = "SELECT suministro_union.sap, periodo_suministro.periodo, suministro_union.nombre, distribuidora.nombre AS distribuidora, periodo_suministro.id_suministro, requerimiento_estado_periodo_suministro_cantidad.c liente, requerimiento_estado_periodo_suministro_cantidad.g estor, requerimiento_estado_periodo_suministro_cantidad.t erceros, requerimiento_estado_periodo_suministro_cantidad.c errado
FROM ((
(SELECT periodos.periodo, suministro_union.id_suministro
FROM periodos, suministro_union) as periodo_suministro
LEFT JOIN
(SELECT requerimiento_estado_periodo_suministro.id_suminis tro, requerimiento_estado_periodo_suministro.periodo, Sum(If((estado='cliente'),(1),(0))) AS cliente, Sum(If((estado='gestor'),(1),(0))) AS gestor, Sum(If((estado='terceros'),(1),(0))) AS terceros, Sum(If((estado='cerrado'),(1),(0))) AS cerrado
FROM
(SELECT requerimiento.id_suministro, requerimiento_instancia_ultima.id_requerimiento, requerimiento_instancia.estado, concat(DATE_FORMAT(requerimiento.fecha,'%y'), DATE_FORMAT(requerimiento.fecha,'%m')) AS periodo
FROM requerimiento INNER JOIN ((SELECT requerimiento_instancia.id_requerimiento, Max(requerimiento_instancia.id_requerimiento_insta ncia) AS ultima
FROM requerimiento_instancia
GROUP BY requerimiento_instancia.id_requerimiento) as requerimiento_instancia_ultima INNER JOIN requerimiento_instancia ON requerimiento_instancia_ultima.ultima = requerimiento_instancia.id_requerimiento_instancia ) ON requerimiento.id_requerimiento = requerimiento_instancia_ultima.id_requerimiento) as requerimiento_estado_periodo_suministro
GROUP BY requerimiento_estado_periodo_suministro.id_suminis tro, requerimiento_estado_periodo_suministro.periodo) as
requerimiento_estado_periodo_suministro_cantidad
ON (periodo_suministro.id_suministro = requerimiento_estado_periodo_suministro_cantidad.i d_suministro) AND (periodo_suministro.periodo = requerimiento_estado_periodo_suministro_cantidad.p eriodo)) INNER JOIN suministro_union ON periodo_suministro.id_suministro = suministro_union.id_suministro) left outer JOIN distribuidora ON suministro_union.id_distrib = distribuidora.id_distrib
WHERE (((periodo_suministro.periodo) Between '$s_desde' And '$s_hasta') AND ((suministro_union.id_cliente)=$id_cliente))
ORDER BY suministro_union.sap, periodo_suministro.periodo";


saludos!
  #2 (permalink)  
Antiguo 16/02/2012, 10:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que opinan de esta query??

Hola af1:

Supongo que la consulta debe ser funcional, es decir, está obteniendo lo que quieres, pero la manera en que lo hace dudo que sea la óptima...

Hace algunos días el compañero gnzsoloyo dijo acertadamente:

Cita:
Yo te diría que elijas: Un buen SP o una consulta ineficiente. ¿Qué prefieres?
A simple vista estás realizando algunas cosas que no estoy seguro que sean necesarias. Por ejemplo esta subconsulta:

Código:
FROM ((
(SELECT periodos.periodo, suministro_union.id_suministro
FROM periodos, suministro_union) as periodo_suministro
la consulta está realizando un producto cartesiano entre las tablas... esto rara vez es requerido, pero sin el contexto de tus tablas y lo que quieres hacer no podría asegurar.

según lo que observé sólo utilizas 5 tablas (periodos, suministro_union, requerimiento, requerimiento_instancia, distribuidora) pero algunas de ellas están repetidas y contenidas en más de una subconsulta, quizás podrías optimizar también esto.

Saludos
Leo.
  #3 (permalink)  
Antiguo 16/02/2012, 15:16
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: que opinan de esta query??

Muchas gracias Leo. Muy amable..

En realidad copie y pege el codigo en el trabajo, de desesperado.

te cuento, me encontre con un sistema echo y con una base de datos MySql

La cuestion es que mi primer tarea es hacer un script sql similar al que postié, para eso tengo que entender este ultimo, lo cual se me hizo imposible.

De SQL tengo lo básico de la facultad, pero me falta muchisima practica.

Que me recomendas para acelerar mi curva de aprendizaje??

Estoy buscando algun manual avanzado, y tambien un IDE, framework o lo que sea, que aunque sea me permita depurar el codigo.. pero no encontre ninguna de las dos cosas..

saludos, y thank you again!
  #4 (permalink)  
Antiguo 16/02/2012, 15:23
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 12 años, 7 meses
Puntos: 11
Respuesta: que opinan de esta query??

yo diria que hicieron la query con alguna herramienta graficamente, sinceramente no tengo nada en contra de eso pero siento que es antiprogramacion xD
__________________
( + ) lineas de código ( - ) televisión
  #5 (permalink)  
Antiguo 16/02/2012, 16:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que opinan de esta query??

Hola de nuevo af1:

No por el hecho de que te estén pidiendo hacer algo "similar" a algo ya existente significa que tengas que cometer las mismas barbaridades que los demás, creo que no te conviene en definitiva tratar de basarte en esta consulta en primer lugar porque difícilmente vas a entenderla y en segunda porque es más que probable que existan otras maneras más sencillas y por tanto más eficientes para hacerla.

Lo que si te conviene es estudiar bien el modelo de datos... cuales son las tablas que la integra, qué relaciones existen entre ellas, qué tipos de datos están manejando, etc. Si necesitas ayuda para obtener una consulta "equivalente" comienza por comentar en el foro estos mismos puntos, incluso sería deseable que incluyas algunos datos de ejemplo para cada tabla. Entre más detalles des del modelo de BD más factible será que podamos ayudarte.

Saludos
Leo.
  #6 (permalink)  
Antiguo 16/02/2012, 16:41
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: que opinan de esta query??

timoteo666
Cita:
yo diria que hicieron la query con alguna herramienta graficamente, sinceramente no tengo nada en contra de eso pero siento que es antiprogramacion xD
Si, es como vos decís. Por lo que tengo entendido migraron la BD MySQL hacia access solo para usar una funcion (que desconosco) que realiza las querys de forma automatica.
  #7 (permalink)  
Antiguo 16/02/2012, 16:44
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: que opinan de esta query??

Gracias Leo, una masa lo tuyo!!!

Ahora estoy practicando un poco SQL haciendo unas querys, hacia como un año que no practicaba.

Mañana voy a subir un DER de las tablas de la BD involucradas en la consulta que tengo que hacer. Obviamente voy a detallar el problema, y voy tratar de poner alguna solucion si es que me sale..

abraGol!
  #8 (permalink)  
Antiguo 17/02/2012, 13:37
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: que opinan de esta query??

Al final lo pude resolver con pasiencia y mirando bien las tablas de la BD..

Gracias che!

Etiquetas: join, query, select
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 18:37.