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

Ciclo de select?

Estas en el tema de Ciclo de select? en el foro de Mysql en Foros del Web. Buenas tardes amigos tengo una duda y nose si es MySQL o php donde tendria que consultar asi que decido irme primero por la BD ...
  #1 (permalink)  
Antiguo 15/04/2015, 10:53
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Pregunta Ciclo de select?

Buenas tardes amigos tengo una duda y nose si es MySQL o php donde tendria que consultar asi que decido irme primero por la BD y les cuento.

Tengo 3 tablas que necesito consultar:
Clientes
Código MySQL:
Ver original
  1. mysql> select * from sadmint_clientes limit 5;
  2. +------------+------------+-------------+---------------------------------------
  3. -+-------+-----+
  4. | codigo     | cod_resp   | cod_cliente | nombre
  5.  | tipo  | act |
  6. +------------+------------+-------------+---------------------------------------
  7. -+-------+-----+
  8. | 0000000001 | 0000002503 | J001230726  | PDVSA PETROLEO, S.A. - PLANES DE SALUD
  9.  | PDVSA | V   |
  10. | 0000000002 | 0000002562 | J000123072  | PDVSA DESARROLLO SOCIAL SUSTEN
  11.  | PDVSA | V   |
  12. | 0000000003 | 0000000178 | J000000130  | PDVSA - LAS SALINAS
  13.  | PDVSA | V   |
  14. | 0000000004 | 0000000180 | J000000132  | PDVSA - CARDON
  15.  | PDVSA | V   |
  16. | 0000000005 | 0000000181 | J000000133  | PDVSA - AMUAY
  17.  | PDVSA | V   |
  18. +------------+------------+-------------+---------------------------------------
  19. -+-------+-----+
Servicios:
Código MySQL:
Ver original
  1. mysql> select * from sadmint_clientes limit 5;
  2. +------------+------------+-------------+---------------------------------------
  3. -+-------+-----+
  4. | codigo     | cod_resp   | cod_cliente | nombre
  5.  | tipo  | act |
  6. +------------+------------+-------------+---------------------------------------
  7. -+-------+-----+
  8. | 0000000001 | 0000002503 | J001230726  | PDVSA PETROLEO, S.A. - PLANES DE SALUD
  9.  | PDVSA | V   |
  10. | 0000000002 | 0000002562 | J000123072  | PDVSA DESARROLLO SOCIAL SUSTEN
  11.  | PDVSA | V   |
  12. | 0000000003 | 0000000178 | J000000130  | PDVSA - LAS SALINAS
  13.  | PDVSA | V   |
  14. | 0000000004 | 0000000180 | J000000132  | PDVSA - CARDON
  15.  | PDVSA | V   |
  16. | 0000000005 | 0000000181 | J000000133  | PDVSA - AMUAY
  17.  | PDVSA | V   |
  18. +------------+------------+-------------+---------------------------------------
  19. -+-------+-----+
y Sol_servicios
Código MySQL:
Ver original
  1. mysql> select * from solc_servicios limit 3;
  2. +------------+------------+------------+------------+--------+------------------
  3. --+-------------------+------------+------------+----------+--------+-----------
  4. -+
  5. | cod_solc   | cliente    | cargo      | paciente   | status | unidad_solicitant
  6. e | unidad_ejecutante | fecha      | articulo   | cantidad | precio | admision
  7.  |
  8. +------------+------------+------------+------------+--------+------------------
  9. --+-------------------+------------+------------+----------+--------+-----------
  10. -+
  11. | 0000000001 | 0000002503 | 0003745605 | 0000092416 | A      | TINT
  12.   | TINT              | 2015-02-02 | I000003710 |    -1.00 | 352.00 | 0000914578
  13.  |
  14. | 0000000002 | 0000002503 | 0003745605 | 0000092416 | A      | TINT
  15.   | TINT              | 2015-02-02 | I000003710 |    -1.00 | 352.00 | 0000914578
  16.  |
  17. | 0000000003 | 0000067215 | 0003715801 | 0000295923 | C      | ADMC
  18.   | QUIR              | 2015-02-10 | I000003710 |     1.00 | 352.00 | 0000916646
  19.  |
  20. +------------+------------+------------+------------+--------+------------------
  21. --+-------------------+------------+------------+----------+--------+-----------
  22. -+
  23. 3 rows in set (0.05 sec)
Esos servicios ejecutados (solc_servicios) estan clasificados por un departamento que aparece en la tabla sadmint_servicios, y otra clasificacion que es el tipo de cliente que aparece en la tabla sadmint_clientes.

Por tal debo de hacer un Inner Join donde capture los datos de estos clientes para los departamentos.

En departamentos manejo unos cuantos (laboratorio, banco de sangre, resonancia, etc) y en tipo de cliente manejo (seguros, empresas, particular...)

Entonces pense en armar un array (en php) donde se encuentren cada unidad

[
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
y en un clico foreach hacer este SQL:

Código MySQL:
Ver original
  1. SELECT SUM(sol.cantidad*sol.precio)as monto, SUM(sol.cantidad) as cuenta, COUNT(DISTINCT sol.paciente) as pacientes FROM solc_servicios sol INNER JOIN sadmint_clientes c ON sol.cliente=c.cod_resp INNER JOIN sadmint_servicios s ON sol.articulo=s.cod_serv WHERE YEAR(sol.fecha)=$year AND MONTH(sol.fecha)=$month AND s.dep='$departamento' AND C.TIPO='$Tipo_Cliente'"
haciendo uno por cada tipo de cliente.

Pero me da la impresion que el proceso es lento y nose si existirá una forma mas viable/rápida/eficaz de hacer esto que hago.

Si se necesita saber que es lo que quiero necesito:
-Monto total de estudios por cada Departamento (segun tipo de cliente)
-Cantidad de estudios por departamento (segun tipo de cliente)
-Cantidad de pacientes por departamento (segun tipo de cliente)

Alguien podria darme una mano con esto? Gracias

Última edición por gnzsoloyo; 15/04/2015 a las 16:43
  #2 (permalink)  
Antiguo 15/04/2015, 11:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ciclo de select?

Hola JuJoGuAl:

Por error pegaste y/o duplicaste la primer tabla (sadmint_clientes), falta la de SERVICIOS...

También sería conveniente que nos pusieras de manera "gráfica" el resultado que esperas obtener a partir de los datos que estás poniendo de ejemplo.

Saludos
Leo
  #3 (permalink)  
Antiguo 15/04/2015, 11:42
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Ciclo de select?

Servicios
Código MySQL:
Ver original
  1. mysql> select * from sadmint_servicios limit 5;
  2. +------------+------------+------------+----------------------------------------
  3. ---------+---------+-----------------+------+
  4. | id_serv    | cod_serv   | cod_barra  | articulo
  5.          | precio  | dep             | tipo |
  6. +------------+------------+------------+----------------------------------------
  7. ---------+---------+-----------------+------+
  8. | 0000000001 | S000008213 | B2007      | AFERESIS TERAPEUTICA* PLASMAFERESIS TER
  9. APEUTICA | 1603.13 | BANCO DE SANGRE | LB   |
  10. | 0000000002 | S000008074 | BAN1001    | AGLUTINAS ANTI-RH OTRAS
  11.          |  214.00 | BANCO DE SANGRE | LB   |
  12. | 0000000003 | S000008073 | BAN1000    | AGLUTINAS ANTI-RH TITULACION
  13.          |  206.40 | BANCO DE SANGRE | LB   |
  14. | 0000000004 | S000008306 | BAN1046    | ANTICORE HEPATITIS (B)
  15.          |  259.00 | BANCO DE SANGRE | LB   |
  16. | 0000000005 | S000000452 | S000000452 | ANTIGENO AUSTRALIA
  17.          |  138.98 | BANCO DE SANGRE | LB   |
  18. +------------+------------+------------+----------------------------------------
  19. ---------+---------+-----------------+------+
  20. 5 rows in set (0.12 sec)

Bueno como podria mostrarte lo que busco? hice el trabajo en excel pero el tiempo que se demora calculando es grande.

Ahora bien quiero saber varias cosas para graficarlas, todo lo que un tipo de cliente (Seguros) genero en total, (sumando los resultados de cada unidad lo obtengo), todo lo que una unidad genero (laboratorio) lo obtengo sumando lo obtenido de esa unidad por tipo de pago, clientes de esa unidad.

En un grafico manejamos los pagos por cliente, en otra por unidad, en otra el detalle.

Necesitas saber algo mas?
  #4 (permalink)  
Antiguo 15/04/2015, 12:02
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: Ciclo de select?

tan sencillo como poner algo como esto:

tengo

tabla1
campo1 campo2 campo3

tabla2
campo1 campo2 campo3

y necesito

tabla1.campo1, tabla1.cmapo2....


eso es lo que te estan pidiendo.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 15/04/2015, 12:26
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Ciclo de select?

Cita:
Iniciado por Libras Ver Mensaje
tan sencillo como poner algo como esto:

tengo

tabla1
campo1 campo2 campo3

tabla2
campo1 campo2 campo3

y necesito

tabla1.campo1, tabla1.cmapo2....


eso es lo que te estan pidiendo.....
Me pidio algo "Grafico" es decir el reporte que deseo Ilustrar, ademas si lees el POST te das cuenta que ya hice las sentencias....
  #6 (permalink)  
Antiguo 15/04/2015, 12:44
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: Ciclo de select?

No amigo no te pide el reporte grafico sino el resultado que deseas obtener, pones tus tablas pero no realmente que esperas, lo que se quisiera ver es el resultado(en query no en grafico)

Si te fijas en el post de Leonardo dice "grafica", do you know what i mean right???

Se espera algo como esto:

http://www.forosdelweb.com/f87/suma-...ablas-1116850/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 15/04/2015 a las 12:50
  #7 (permalink)  
Antiguo 15/04/2015, 16:16
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Ciclo de select?

Bueno agrego:

3 tablas:

##########
Clientes
------------------
id nombre tipo
1 juan seguros
2 pedro fundacion
3 jose empresas
--------------------
Todo cliente que no aparezca en esta tabla se considera "particular"
##########
Servicios
------------------
id nombre unidad
1 rx torax radiologia
2 hematologia completa laboratorio
3 resonancia cerebral resonancia
--------------------
Luego la tabla donde se almacenan todos los Servicios ejecutados:
##########
sol_servicios
------------------
id cliente paciente articulo cantidad precio
1 juan pac1 rx toax 2 175
2 pedro pac2 resonancia cereb 1 350
3 manuel pac3 hematologia completa 1 200
--------------------

Bien como pretendo saber lo que facturo cada Unidad por cliente tecnicamente es un Select:

Código MySQL:
Ver original
  1. SELECT SUM(sol.cantidad*sol.precio) as monto, SUM(sol.cantidad) as cuenta, COUNT(DISTINCT sol.paciente) as pacientes FROM solc_servicios sol INNER JOIN sadmint_clientes c ON sol.cliente=c.cod_resp INNER JOIN sadmint_servicios s ON sol.articulo=s.cod_serv WHERE YEAR(sol.fecha)=2015 AND MONTH(sol.fecha)=03 AND s.dep='laboratorio' AND C.TIPO='seguros'"

que me debe de traer como resultado de los clientes SEGUROS de la unidad LABORATORIO
monto (Monto de los examanes), cuenta (Cantidad de clientes SEGUROS), pacientes (PACIENTES ATENDIDOS)

Separo clientes de pacientes porque normalmente un cliente no necesariamente es el paciente.

Bueno debido a que son muchas unidades y algunos tipos de cliente pense que seria mas "rapido" o "eficaz" sacar en un solo select todos los datos de una unidad:

Código MySQL:
Ver original
  1. SUM(CASE WHEN C.tipo='SEGUROS' THEN sol.MONTO END) as m_se,
  2. SUM(CASE WHEN C.tipo='EMPRESAS' THEN sol.MONTO END) as m_em,
  3. ...
  4. COUNT(CASE WHEN C.tipo='SEGUROS' THEN c.cod_resp END) as e_se
  5. ...
  6. FROM solc_servicios sol
  7. INNER JOIN sadmint_servicios s ON sol.articulo = s.cod_serv
  8. LEFT JOIN sadmint_clientes c ON sol.cliente = c.cod_resp
  9. WHERE YEAR (sol.fecha) = 2015
  10.  AND MONTH (sol.fecha) = 3
  11. AND s.dep = 'BANCO DE SANGRE'

que me traiga
monto_seguros, monto_empresas, monto_fundacion...
cuenta_seguros, cuenta_empresas....
pacientes_seguros, pacientes_empresas...

pero se tarda bastante.

Entonces Busco que me den consejos como puedo Potenciar esta búsqueda?

Etiquetas: Ninguno
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 10:05.