Publi

  • Utilizando Eloquent para interactuar con bases de datos en nuestros proyectos paso a paso.

    Eloquent para bases de datos
    Parece que fue ayer cuando, cada vez que necesitamos hacer algo con bases de datos en algún proyecto, abríamos la conexión y hacíamos la consulta a mano… mysql_connect(), mysql_query(), mysql_fetch_assoc()… No está mal cuando queremos aprender cómo funciona todo, pero cuando vamos a ponernos a programar en el mundo real, nos viene mejor programar con sistemas que nos hagan la vida un poco más fácil y nos separen en cierto modo de las consultas que hacemos a la base de datos.… Leer artículo completo

  • ¿Cómo obtener el tamaño de las tablas en MySQL? Y alguna idea para nuestros servidores

    Hoy en día tenemos multitud de aplicaciones web instaladas en nuestros servidores. Algunas serán para gestionar nuestros servicios de forma más cómoda, también puede que tengamos varios WordPress instalados, Drupal, una tienda online, CRM, o algunas más específicas. El problema aquí es que como todo en esta vida digital, tiende a ocupar el máximo espacio posible. El caso es que a veces, es muy útil contar con un resumen del tamaño de todas las tablas de nuestro servidor.… Leer artículo completo

  • Formas de eliminar etiquetas XML/HTML desde MySQL o MariaDb. strip_tags en MySQL

    popsometags
    Estamos haciendo una consulta a una tabla, y vemos que la tabla tiene un texto. Pero dicho texto contiene etiquetas HTML que nos molestan o no deberían estar ahí (puede que el valor lo hayamos extraído de un campo WYSIWYG) y cuando vamos a extraer la información nos molesta.

    Pero tenemos prisa y tendríamos que modificar o crear un programa y no tenemos tiempo. ¿Qué hacemos? Pues nada, implementar strip_tags() dentro de MySQL y luego pegarnos un baile.… Leer artículo completo

  • Cómo expulsar todas las sesiones MySQL de un usuario en particular desde un script

    502729552_aaa355b1ce_o

    Muchas veces, puede que tengamos una aplicación no muy bien depurada en nuestro servidor web. A dicha aplicación le hemos dado su propio usuario MySQL y observamos que las conexiones no se cierran adecuadamente.

    Temporalmente puede que la solución sea expulsar de vez en cuando todos los usuarios que siguen activos, con el fin de no saturar nuestro servidor MySQL. Puede que en otros servicios que tengamos activos hayamos visto el mensaje «Too many connections» impidiendo así el acceso a los demás servicios.… Leer artículo completo

  • Un buen 2015 para el blog. Los posts que han marcado el año y consultas SQL

    2015

    Como ya es costumbre los últimos años, preparo un breve resumen de lo más destacado del año para el blog. Aunque este año pretendo hacer algo un tanto diferente. Vamos a meter un poco de SQL 🙂

    Un año programando y compartiendo

    Este blog empezó siendo una auto-chuleta para dar clases particulares de programación, y así poder ayudar a mis alumnos planteando problemas y soluciones, así como una pequeña documentación de ciertas cosas que he encontrado interesantes.… Leer artículo completo

  • Bucles y cursores en MySQL con ejemplos

    Hace mucho tiempo que quería escribir sobre esto. Y aunque es recomendable no abusar de los bucles en MySQL, es más, a veces no son necesarios, y siempre hay que buscar una solución que no los use, a veces no la vamos a encontrar y será en esos casos cuando debamos utilizarlos.

    Veamos un bucle muy sencillo, parecido a un for de los de toda la vida, en el que contamos del 1 al 9:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    DELIMITER $$
    CREATE PROCEDURE simple_loop ( )
    BEGIN
      DECLARE counter BIGINT DEFAULT 0;
     
      my_loop: LOOP
        SET counter=counter+1;

        IF counter=10 THEN
          LEAVE my_loop;
        END IF;

        SELECT counter;

      END LOOP my_loop;
    END$$
    DELIMITER ;

    cuando hagamos:

    1
    CALL simple_loop();

    Veremos algo como esto:

    +———+
    | counter |
    +———+
    | 1 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 2 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 3 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 4 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 5 |
    +———+
    1 row in set (0.01 sec)+———+
    | counter |
    +———+
    | 6 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 7 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 8 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 9 |
    +———+
    1 row in set (0.01 sec)

    Query OK, 0 rows affected (0.01 sec)

    Vemos que el código que iteraremos está entre LOOP…END LOOP, lo que aparece justo antes (my_loop) es una etiqueta para nombrar ese bucle.… Leer artículo completo

  • Cariño, quieres algo de postre? [SQL en la vida real]

    Mientras yo, absorto en mis pensamientos digo:

    1
    2
    SELECT * FROM Frigorifico WHERE AND Tipo='Yogur' AND Caducidad IN
         (SELECT MIN(Caducidad) FROM Frigorifico WHERE AND Tipo='Yogur' AND Caducidad>=NOW());

    Y mi pareja me mira con una cara de no entender demasiado, o de haber soltado la frikada del año, el caso es que luego me trajo exactamente lo que pedí, el yogur que antes caduque… siempre y cuando no esté caducado ya 🙂

    Foto: stopnlook (Flickr) CC-by a 21/08/2013… Leer artículo completo

  • MySQL: Rellenar campos de fecha de creación y modificación con la fecha actual automáticamente

    Es muy útil, al crear una tabla cuyos datos pueden ser modificados con cierta frecuencia, añadir campos que especifiquen el momento de creación y el de modificación. Por ejemplo, creamos la siguiente tabla de configuración para una aplicación:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE SCHEMA PoesiaBinaria;

    CREATE TABLE PoesiaBinaria.configuracion (
        `id` BIGINT NOT NULL AUTO_INCREMENT,
        `pref` VARCHAR (64) NOT NULL,
        `value` VARCHAR(128) NOT NULL,
        `ctime` DATETIME NOT NULL,
        `mtime` DATETIME NOT NULL,
        PRIMARY KEY (`id`)
    ) ENGINE =MyISAM;

    El objetivo es que cuando creemos un nuevo valor, éste rellene automáticamente las fechas de creación y modificación a la fecha actual.… Leer artículo completo

  • MySQL: Listar elementos evitando las repeticiones consecutivas

    Imaginémonos un programa que almacena periódicamente valores en una base de datos, dichos valores pueden ser temperatura, humedad, uso de CPU, voltaje, corriente, intensidad de luz, etc. En definitiva, parámetros que varían con el tiempo, con la característica de que, dos muestras seguidas pueden ser iguales, y no nos interesaría obtenerlas, pero tras una variación sí que nos interesaría volver a ver el mismo valor. Por ejemplo, en una tabla de uno de CPU vemos:

    IdDateCPU Use
    15-jun-2013 10:44:2056%25-jun-2013 10:45:5057%35-jun-2013 10:47:2057%45-jun-2013 10:48:5057%55-jun-2013 10:50:2058%65-jun-2013 10:51:5058%75-jun-2013 10:53:2056%85-jun-2013 10:54:5055%95-jun-2013 10:56:2056%105-jun-2013 10:57:5056%115-jun-2013 10:58:2059%125-jun-2013 11:00:5059%

    Cuando en realidad lo que nos interesaría ver es:

    IdDateCPU Use
    15-jun-2013 10:44:2056%25-jun-2013 10:45:5057%55-jun-2013 10:50:2058%75-jun-2013 10:53:2056%85-jun-2013 10:54:5055%95-jun-2013 10:56:2056%115-jun-2013 10:58:2059%

    Por tanto tenemos dos formas de abordar el tema:

    Evitando introducir valores repetidos

    Para ello, bastaría con introducir un trigger en la base de datos asociado a la introducción de los valores en dicha tabla.… Leer artículo completo

  • Otra forma de trabajar con MySQL desde Emacs con org-mode y org-babel


    Sé que org-mode vale para mucho más, pero es tan grande su utilidad, que hasta para esto nos puede servir, y nos permitirá hacer cosas muy chulas.

    Aunque no es tan flexible como tener una instancia del comando mysql abierto, la potencia que nos ofrecerá para tratar la salida es grandísima.

    Sólo tenemos que tener org-mode instalado, y org-babel configurado. Para configurar org-mode y org-babel, debemos introducir en nuestro $HOME/.emacs lo siguiente:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    (require 'org-install)

    (org-babel-do-load-languages
     'org-babel-load-languages
     '((R .
    Leer artículo completo