Ver Mensaje Individual
  #13 (permalink)  
Antiguo 12/02/2017, 00:28
Triby2
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 10 años, 5 meses
Puntos: 30
Respuesta: Php mysql consulta no funciona

Gracias por compartir las tablas, hubiese estado bien que incluyeras algunos registros pero bueno, ya añadi unos inventados.

Primero de todo, antes de ponerse a diseña una base de datos hay que pensar en su estructuración. Ya que si se hace bien, se facilita mucho la programación y reduces la cantidad de errores que puedan ocurrir ya de entrada.

Es decir medicamtnos en la tabla medicamentos, entregas en la tabla de entregas y recepciones en la tabla de recepciones, y para controlar las diferentes entradas y salidas, una tabla de órdenes donde se diferencien por tipo de orden si es una entrada o una salida.

Te comparto las tablas como las estructuré (sin las órdenes claro) acompañadas de una captura de cómo las rellené:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `medicamentos` (
  2.   `codigo` VARCHAR(150) NOT NULL,
  3.   `medicamento` VARCHAR(255) NOT NULL,
  4.   `presentacion` VARCHAR(50) NOT NULL,
  5.   `fecha_elaboracion` DATETIME NOT NULL,
  6.   `fecha_vencimiento` DATETIME NOT NULL,
  7.   `lote` VARCHAR(50) NOT NULL
http://prntscr.com/e7nguv

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `entrega` (
  2.   `codigo` VARCHAR(150) NOT NULL,
  3.   `cantidad_entregada` INTEGER(11) NOT NULL,
  4.   `destino` VARCHAR(200) NOT NULL
http://prntscr.com/e7nh8h

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `recepcion` (
  2.   `codigo` VARCHAR(150) NOT NULL,
  3.   `cantidad_recibida` INTEGER(11) NOT NULL,
  4.   `fecha_recibida` DATETIME NOT NULL
http://prntscr.com/e7nh50

Y acontinuación el SQL que necesitas junto con una captura del resultado:

Entradas:
Código MySQL:
Ver original
  1. medicamentos.codigo,
  2. medicamentos.medicamento,
  3. SUM(recepcion.cantidad_recibida)
  4. medicamentos
  5. LEFT JOIN recepcion ON medicamentos.codigo = recepcion.codigo
  6. GROUP BY medicamentos.codigo
http://prntscr.com/e7ngj2

Salidas:
Código MySQL:
Ver original
  1. medicamentos.codigo,
  2. medicamentos.medicamento,
  3. SUM(entrega.cantidad_entregada)
  4. medicamentos
  5. INNER JOIN entrega ON medicamentos.codigo = entrega.codigo
  6. GROUP BY medicamentos.codigo
http://prntscr.com/e7ngo5

Como vés, con esos resultados podrías mostrar las entradas y salidas por cada producto y mediante PHP, mostrar el inventario actual.

NOTA: Date cuen que he modificado algunos tipos de campos y he igualado tamaños, no puedes tener tamaños distintos entre tablas y mucho menos tipos de datos. Lo que sean numeros, son integer, los alphanumericos, varchar, fecha y tiempo, datetime, etc...

Espero que, ahora sí, te haya resuelto el tema.

Un saludo