Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta Select

Estas en el tema de Consulta Select en el foro de PHP en Foros del Web. Que tal amigos, estoy batallando bastante con una consulta que no se si me la estoy complicando yo solo, les explico lo que intento hacer: ...
  #1 (permalink)  
Antiguo 03/03/2015, 11:40
 
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Consulta Select

Que tal amigos, estoy batallando bastante con una consulta que no se si me la estoy complicando yo solo, les explico lo que intento hacer:

tengo una tabla en la bd con mas o menos la siguiente estructura:

tabla de existencias ->
id_existencia -- id_producto -- id_almacen -- cantidad
1 500 1 10
2 500 2 5
3 500 3 20
4 500 4 9
n n n n

bien les explico para que funciona esa tabla, esa tabla me guarda la existencia de cada producto en los distintos almacenes, por eso pueden observar que el id_producto se repite por cada id_almacen y lo que varia es la cantidad, entonces, necesito un reporte que haga lo siguiente:

el usuario escojera 1 almacen, de ese almacen le debe mostrar la existencia y le debe mostrar siempre la existencia del almacen 2 y 3, mas o menos quedaria asi el reporte que estoy buscando realizar:

producto existencia_alm_seleccionado(1) existencia_alm2 existencia_alm3
500 10 5 20


espero me haya explicado, lo que yo hice fue lo siguiente, pero se queda demora demasiado, de 10 a 15 minutos, ya que el total de productos son 28 mil registros, aqui esta mi script php

Código PHP:
$id_almacen $_POST["almacen"];
        
$almacenMty 5;
        
$almacenBodega 7;
        
$almacenNorte 1;

        
$s "
            SELECT
            t_productos.id_producto,
            t_productos.codigob,
            t_productos.descripcion_anterior,
            t_existencia_mty.id_producto,
            t_existencia_mty.cantidad AS existencia_mty,
            t_existencia_bodega.cantidad AS existencia_bodega,
            t_existencia_norte.cantidad AS existencia_norte,
            t_existencia_almacen.cantidad AS existencia_almacen,
            t_existencia_almacen.maximo AS maximo_almacen,
            t_existencia_almacen.minimo AS minimo_almacen
            FROM
            productos t_productos,
            existencias t_existencia_mty,
            existencias t_existencia_bodega,
            existencias t_existencia_norte,
            existencias t_existencia_almacen
            WHERE t_existencia_mty.id_producto = t_productos.id_producto
            AND t_existencia_mty.id_almacen = '$almacenMty'
            AND t_existencia_bodega.id_producto = t_existencia_mty.id_producto
            AND t_existencia_bodega.id_almacen = '$almacenBodega'
            AND t_existencia_norte.id_producto = t_existencia_mty.id_producto
            AND t_existencia_norte.id_almacen = '$almacenNorte'
            AND t_existencia_almacen.id_producto = t_existencia_mty.id_producto
            AND t_existencia_almacen.id_almacen = '$id_almacen'
            LIMIT 0,30
        "


gracias !!!
  #2 (permalink)  
Antiguo 03/03/2015, 18:23
 
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: COnsulta Select

lo solucione indexando los campos id_almacen y id_producto de la tabla de existencias. alguien me puede decir si lo que hice fue bueno o malo ??, saludos !!
  #3 (permalink)  
Antiguo 03/03/2015, 19:24
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: COnsulta Select

¿Te funcionó, mejoró la performance ?
Entonces está bien.
A mí, de todos modos me parece una consulta demasiado complicada, pero tendré que revisar la idea para sacar una propuesta.
Por lo pronto, tienes un muy mal diseño de datos. Lo que describes esta mal definido.
__________________
¿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 06/03/2015, 09:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: COnsulta Select

Pues si funciono pero siento que no es lo correcto, y al mal diseño de datos te refieres a la base de datos, hice mal la relacion de la tabla ??, agradezco tus comentarios
  #5 (permalink)  
Antiguo 06/03/2015, 10:57
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: COnsulta Select

Yo probaría una consulta mas o menos así:
Código MySQL:
Ver original
  1.     p.id_producto,
  2.     p.codigob,
  3.     p.descripcion_anterior,
  4.     SUM(IF(e.almacen_id = '$almacenMty', e.cantidad, 0)) existencia_mty,
  5.     SUM(IF(e.almacen_id = '$almacenBodega', e.cantidad, 0))  existencia_bodega,
  6.     SUM(IF(e.almacen_id = '$almacenNorte', e.cantidad, 0))  existencia_norte,
  7.     SUM(IF(e.almacen_id = '$id_almacen', e.cantidad, 0))  existencia_almacen,
  8.     MAX(IF(e.almacen_id = '$id_almacen', e.maximo, 0)) maximo_almacen,
  9.     MIN(IF(e.almacen_id = '$id_almacen', e.minimo, 0)) AS minimo_almacen
  10.     productos p INNER JOIN  existencias e ON p.id_producto = e.id_producto
  11. GROUP BY p.id_producto
  12. LIMIT 0,30
Ten en cuenta que yo no tengo ni tu tabla ni tus datos, por lo que estoy haciendo una mera suposición de la lógica que planteas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: registro, select, tabla
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 17:07.