Archivo de la etiqueta: Programming

Borrar un dato de dos tablas con la misma consulta – MySQL Tips

MySQLSeguramente en alguna ocasión nos habremos visto, o nos podemos ver en la situación de borrar de dos tablas un dato, un ejemplo clásico seria el de creo una factura y esta contiene productos, con lo que podríamos tener una tabla de Facturas y otra tabla que fueran detallesFacturas, en la primera guardaríamos los datos generales de la factura y en el la segunda los artículos o lineas que comprondría la factura, pues bien, si borro la factura tengo que borrar también los artículos que estaban en esa factura, y eso tendría que poder hacerlo con una sola consulta.

Tabla Facturas Tabla detallesFacturas
Id Id
 (Resto campos) IdFactura
IdProducto
(Resto campos)

Imaginemos que tenemos la factura 123 y tenemos que borrarla y queremos borrar también todos los registros referentes a esa factura en la tabla detallesFactura.

La consulta de borrado quedaría así

DELETE a1, a2 FROM Facturas AS a1 INNER JOIN detallesFacturas AS a2
WHERE a1.Id=a2.IdFactura AND a1.Id LIKE 123;

Otra opción podria ser

DELETE FROM a1, a2 USING Facturas AS a1 INNER JOIN detallesFacturas AS a2
WHERE a1.Id=a2.IdFactura AND a1.Id LIKE 123;

Y con esta consulta borraríamos la factura de la tabla Facturas y los datos de la factura que hubiera en la tabla de detallesFacturas.

Mas info aqui: http://dev.mysql.com/doc/refman/5.1/en/delete.html

Libreria para formatear numeros con Javascript

Una librería de JavaScript muy útil para dar formato a los números a la hora de presentarlos en el formato que queramos, la posición de las comas y los puntos, el símbolo de la moneda, valores negativos.

Formatting numbers in JavaScript – mredkj.com.

Fechas PHP a MySQL y vuelta – MySQL Tips

PHP Programming languageUna de las cosas con las que toca lidiar practicamente siempre que trabajamos con fechas contra una base de datos MySQL es que la base va MySQLa almacenar las fechas de la manera ISO «año-mes-dia» y nosotros a la hora de trabajar trabajos con el formato Europeo, ya sea «dia-mes-año» o «dia/mes/año».

Durante muchos años trabajaba con la tecnica de la función bidireccional, es decir, me creaba una función la cual cuando le llegaba la fecha la convertia en un sentido u otro.

function cambiaFormatoFecha($fechaOriginal)
{
 //Dividimos la fecha de la hora si existe
 $partesStamp = explode(" ", $fechaOriginal);
 // La primera parte es la fecha, la segunda la hora
 $partesFecha = explode ( "-", $partesStamp[0] );
 // La fecha final
 return $partesFecha[2] ."-".$partesFecha[1]."-".$partesFecha[0];
}

MySQL guarda las fechas separadas por guiones, así que si nosotros definimos el formato de fecha separado con guiones, pues eso que tenemos ganado y esta función nos convierte tanto nuestras fechas cuando las introducimos como las fechas que devuelve el MySQL.

Trabajar con esto puede parecer que es una gran ventaja, pero la verdad que a nivel de rendimiento no lo es ya que supone ejecutar la función cada vez que aparezca un registro de fecha.

Una solución bastante mas eficiente es la de procesar las fechas en la consulta. Para eso utilizaremos las funciones incorporadas de MySQL DATE_FORMAT y STR_TO_DATE.

Si queremos unos registros de una determinada fecha podemos hacer:


SELECT * FROM `tabla` WHERE fecha LIKE STR_TO_DATE('mifecha','%d-%m-%Y);

En esta consulta mifecha esta en el formato dia-mes-año

Si queremos ver las fechas en el formato dia-mes-año


SELECT DATE_FORMAT(fecha,'%d-%m-%Y) FROM `tabla`;

Para mas información

STR_TO_DATE http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date

DATE_FORMAT http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

Datepicker Jquery en castellano

Dejo el codigo del datepicker de Jquery para que salga en formato castellano


$('.datepicker').datepicker({
dateFormat: "dd-mm-yy",
firstDay: 1,
dayNamesMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"],
dayNamesShort: ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
monthNames:
["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
monthNamesShort:
["Ene", "Feb", "Mar", "Abr", "May", "Jun",
"Jul", "Ago", "Sep", "Oct", "Nov", "Dic"]
});

view raw

datepickerEs.js

hosted with ❤ by GitHub

He creado otro Gist con una demo de como crearlo sin necesidad de hacer clic en el input


<!–
Demo de datepicker inline en castellano
Autor: Ruben Lacasa Mas <http://rubenlacasa.es&gt;
–>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="author" content="Ruben Lacasa Mas – rubenlacasa.es">
<meta name="description" content="Demo de jQuery inline en castellano">
<title>datepicker demo</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/flick/jquery-ui.min.css"&gt;
<script src="http://code.jquery.com/jquery-1.10.0.min.js"></script&gt;
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script&gt;
</head>
<body>
<div id="datepicker"></div>
<div id="datos">
<label for='fecha'>Fecha:</label>
<!– Campo de texto que recibira el valor seleccionado en el datepicker
le he puesto el atributo readonly para no poder escribir directamente –>
<input type='text' name='fecha' id='fecha' readonly />
</div>
<script>
$( "#datepicker" ).datepicker({
// Formato de la fecha
dateFormat: "dd/mm/yy",
// Primer dia de la semana El lunes
firstDay: 1,
// Dias Largo en castellano
dayNames: [ "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" ],
// Dias cortos en castellano
dayNamesMin: [ "Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa" ],
// Nombres largos de los meses en castellano
monthNames: [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ],
// Nombres de los meses en formato corto
monthNamesShort: [ "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dec" ],
// Cuando seleccionamos la fecha esta se pone en el campo Input
onSelect: function(dateText) {
$('#fecha').val(dateText);
}
});
</script>
</body>
</html>

La documentación de jQuery UI http://jqueryui.com/demos/datepicker/

Función que nos devuelve el numero de días de un mes

Mas de una vez nos habremos visto en la duda de, como hacer que según el mes y el año que hemos marcado que nos de los dias que tiene ese mes, pues bien, en php hay una función interna que nos facilita el trabajo, esta es cal_days_in_month, y hay que pasarle como parametros el calendario que queremos, por ejemplo CAL_GREGORIAN, el numero del mes, y el año y nos devuelve el numero de dias que tuvo ese mes.

$numeroDias = cal_days_in_month(CAL_GREGORIAN, 10, 2008);
echo $numeroDias; //Devolvera 31

vía PHP: cal_days_in_month – Manual.

phpmaster | 10 Tips for Better Coding

 

Gran articulo en el que se ven 10 puntos que hay que tener muy en cuenta a la hora de programar un buen y mantenible codigo php.

phpmaster | 10 Tips for Better Coding.

Conexion a MySQL con Python 101

English: Python logo Deutsch: Python LogoMySQL

Dejo aquí lo que seria los parámetros básicos para conectarnos a una base de datos MySQL con Python y que nos devuelva los resultados de una consulta

import MySQLdb as dbapi
bbdd = dbapi.Connect(host='localhost',user='myuser',passwd='mypass',db='mydb')
cursor = bbdd.cursor()
sql = "SELECT * FROM table WHERE field like %s"
params = 'myparam'
cursor.execute(sql, params)
for datos in cursor.fetchall():
    print datos

Por defecto el paramstyle en la conexión con MySQL es «format»
en el cual los especificadores se poner de la misma manera que lo haríamos con el printf en C

Si quisieramos establecer otro tipo de especificador lo hariamos de la siguiente manera

bbdd.paramstyle = "qmark" # los especificadores con ? "select * from table where valor=?"
bbdd.paramstyle = "numeric" # numero indicando la posicion "select * from table where :1"
bbdd.paramstyle = "named" #el nombre del valor :nombre "select * from table where :nombre"

Clase para la devolución de la entrada por teclado con JAVA

Duke, the Java Mascot, in the waving pose. Duk...
Image via Wikipedia

Hay trozos de código que nos cansamos de escribirlos constantemente, y en la mayoría de los casos acabamos copiandola y pegándola de una aplicación a otra. Uno de estos trozos podria ser el recoger datos de teclado en una clase JAVA y devolverlos por pantalla.

package entrada;
import java.io.*;
/**
 * @author Ruben Lacasa
 *
 */
public class Entrada {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String param = getEntrada("Introduzca un texto: ");
		System.out.println("Has introducido " + param);
	}
	/**
	 * Recoge lo que hemos escrito y lo devuelve
	 * 
	 * @param peticion
	 * @return
	 */
	public static String getEntrada(String peticion) {
		BufferedReader stdin = new BufferedReader(
				new InputStreamReader(System.in));
		System.out.print(peticion);
		System.out.flush();
		try {
			return stdin.readLine();
		} catch (Exception e) {
			return "Error: " + e.getMessage();
		}
	}
}

Esta funcion tambien esta disponible como Gist en Github aqui

Hello World!!!

An example Hello world program, written in Per...
Image via Wikipedia

Hello World!!!

Con esta famosa frase nos iniciamos todos en cualquier lenguaje de programación, cualquier manual o cualquier curso en sus primeras lecciones la primera demostración que nos hacen es sacar por pantalla esta frase.

Por eso he pensado en hacer un pequeño recopilatorio de como mostrar esta frase en distintos lenguajes de programación.

JAVASCRIPT

<script language='text/javascript'>
    document.write("Hello World!!!");
</script>

JAVA

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!!!");
    }
}

PHP

<?php
echo "Hello World!!!";
?>

RUBY

puts "Hello World!!!"

PYTHON

print ("Hello World!!!")

PERL

print "Hello World!!!";

Objetive-C

#import <Foundation/Foundation.h>;
int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello, World!!!");
    [pool drain];
    return 0;
}

Formato moneda con PHP – PHP Tips

The PHP logo displaying the Handel Gothic font.
Image via Wikipedia

Con la función money_format  money_format( $formato, $numero ),  podemos convertir un numero en el formato de moneda sin necesidad de estar agregando el símbolo, establecer el numero de decimales que tendrá el numero, el separador de miles y el separador de decimales. En formato lo mas sencillo es poner «%i» o «%n» siendo la primera el formato internacional para la configuración regional y la segunda el formato nacional para la configuración regional.

Estas opciones las coges de las locales que tengamos definidas en el sistema, y aquí viene lo divertido de la historia.

Primero establecemos el formato monetario con setlocale.

$numero = 12345.67;
setlocale(LC_MONETARY, 'es_ES');
echo money_format('%i', $numero) ."\n"; // devuelve 12.345,6,7 EUR
echo money_format('%n', $numero) ."\n"; //devuelve 12.345,67 €

Es posible que probéis estos ejemplos y no funcionen, uno de los motivos es si estais usando ubuntu o cualquier distro basada en Debian, en estas distros hay que poner en vez de es_ES , es_ES.UTF-8, o puede que estéis probando esta función en windows y no funcione a lo cual me remito a lo que dice la documentacion de PHP:

«La función money_format() sólo está definida si el sistema tiene capacidad strfmon. Por ejemplo, Windows no lo hace, así que money_format() no está definido en Windows.»

Por lo tanto si tenemos la aplicación corriendo en un windows no podremos utilizar esta función tan util.

+ Info: http://es.php.net/manual/es/function.money-format.php