Suma de Entradas y Salidas
El problema reside en realizar una suma de dos campos en tablas distintas (entradas y salidas) con un enlace común (artículos), el DER correspondería a lo siguiente:
Pareciera fácil pero no lo es tanto pues tiene su truco. El código sería el siguiente:
Me parece que este código es bastante optimizable e incluso puede existir otro enfoque totalmente distinto.
Que coincidan el uso del UNION, subconsulta y agrupación no me da buena espina. Me gustaría saber si es posible hacer esto de otra forma.
Booleanos en PHP
Si quieres convertir un representación en cadena de un boolean, ejem. "yes", "on", "true", "false", etc... a un boolean real, puedes probar esto:
Escapar los caracteres raros en php para mysql
Remover elementos duplicados en un arreglo en PHP: array_unique($array);
Consulta que devuelve una fila aleatoria de una tabla de MySQL
Esta consulta funciona bien para tablas con pocos registros (menos de 10,000) para tablas mas pesadas este enlace provee una mejor forma para seleccionar una fila aleatoria
El problema reside en realizar una suma de dos campos en tablas distintas (entradas y salidas) con un enlace común (artículos), el DER correspondería a lo siguiente:
Modelo de Bodega |
SELECT tipo_articulos_nombre_tipo, articulos_descripcion, SUM(cantidad) AS entradas, SUM(cantidad_salida) AS salidas FROM ( (SELECT tipo_articulos.`nombre_tipo` AS tipo_articulos_nombre_tipo, articulos.`descripcion` AS articulos_descripcion, detalle_entradas.`cantidad` AS cantidad, 0.0 as cantidad_salida FROM `articulos` articulos LEFT JOIN `detalle_entradas` detalle_entradas ON detalle_entradas.`idarticulo` = articulos.`idarticulo` INNER JOIN `entradas` entradas on entradas.identrada=detalle_entradas.`identrada` INNER JOIN `tipo_articulos` tipo_articulos ON articulos.`idtipo_articulo` = tipo_articulos.`idtipo_articulo` ORDER entradas.`fecha_entrada` DESC ) UNION ALL (SELECT tipo_articulos.`nombre_tipo` AS tipo_articulos_nombre_tipo, articulos.`descripcion` AS articulos_descripcion, 0.0 as cantidad, detalle_salidas.`cantidad_despachada` AS cantidad_salida FROM `articulos` articulos INNER JOIN `tipo_articulos` tipo_articulos ON articulos.`idtipo_articulo` = tipo_articulos.`idtipo_articulo` LEFT JOIN `detalle_salidas` detalle_salidas ON detalle_salidas.`idarticulo` = articulos.`idarticulo` INNER JOIN `salidas` salidas ON detalle_salidas.`idsalida` = salidas.`idsalida` ORDER BY salidas.`fecha_salida` DESC) ) AS tabla GROUP BY articulos_descripcion
Me parece que este código es bastante optimizable e incluso puede existir otro enfoque totalmente distinto.
Que coincidan el uso del UNION, subconsulta y agrupación no me da buena espina. Me gustaría saber si es posible hacer esto de otra forma.
Booleanos en PHP
Si quieres convertir un representación en cadena de un boolean, ejem. "yes", "on", "true", "false", etc... a un boolean real, puedes probar esto:
<?php $myString = "On"; $b = filter_var($myString, FILTER_VALIDATE_BOOLEAN); ?>Esto retornará TRUE para "1", "true", "on" y "yes". De lo contrario retorna FALSE.
Escapar los caracteres raros en php para mysql
if(function_exists('mysql_real_escape_string')){ $_REQUEST = array_map('mysql_real_escape_string', $_REQUEST); }
Remover elementos duplicados en un arreglo en PHP: array_unique($array);
$entrada = array("a" => "verde", "rojo", "b" => "verde", "azul", "rojo"); $resultado = array_unique($entrada); print_r($resultado);El resultado del ejemplo seria: Array ( [a] => verde [0] => rojo [1] => azul )
Consulta que devuelve una fila aleatoria de una tabla de MySQL
select * from YOUR_TABLE order by rand() limit 1
Esta consulta funciona bien para tablas con pocos registros (menos de 10,000) para tablas mas pesadas este enlace provee una mejor forma para seleccionar una fila aleatoria
juan carlos, e tratado de usar la funcion array_map, especificamente en la directiva que das el ejemplo
ResponderEliminarif(function_exists('mysql_real_escape_string')){
$_REQUEST = array_map('mysql_real_escape_string', $_REQUEST);
}
pero no me funciona, al verificar la variable que almacena el nuevo arreglo esta vacia. E probado array_map con otras funciones(strtoupper) y funciona bien pero en mysql_real...string nada hermano. talvez me sugeris un camino
Se me ocurren tres escenarios:
ResponderEliminar1. Que el arreglo de entrada ($_REQUEST en este caso)este vacío.
2. Que la ejecución no esté entrando dentro del if. Lo que significaría que o mysql no esta habilitado o la librería no soporta este método.
3. Que sí se esté utilizando la función mysql_real_escape_string, pero no exista una conexión abierta, lo que devolvería un false a la variable destino y E_WARNING.
Intenta descartar estos escenarios.
en efecto, la solucion tres, es la correcto ayer sabado estuve probando y observe que ese era la razon. upps una pifia. gracias por contestar.
ResponderEliminar