Publi

Introducir el resultado de una consulta SELECT de mysql en un Array [BASH]

data

¡Bash es una pasada! Es capaz de dejarnos hacer maravillas en poco tiempo y de automatizar lo inautomatizable, en este caso, traigo un ejemplo más, de cómo un código muy corto es capaz de presentarnos los resultados de una consulta SELECT de mysql:

Los datos de prueba provienen de uno de mis proyectos: Málaga Bloguea donde muestro las últimas novedades de blogs de Málaga.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash

OLDIFS=IFS
MYSQL_USER=#Usuario Mysql
MYSQL_PASSWORD=#Password Mysql
MYSQL_HOST="localhost"
# IFS personalizado, para poder delimitar los campos correctamente
IFS="`echo -e "\t\n\r\f"`"

# Declaramos la variable como array, no es estrictamente necesario, pero sí un poco más correcto
declare -a IPS

# Generamos la consulta (Si vamos a utilizar un juego de caracteres determinado, como
# UTF8, debemos especificar primero para evitar sorpresas.
SQL="SET CHARACTER SET utf8; SELECT \`titulo\`, \`directlink\`, \`nombre\` AS \`nombreblog\` FROM malagabloguea.blogentry LEFT JOIN malagabloguea.blogs ON blogs.id=blogentry.blogid ORDER BY blogentry.ctime DESC LIMIT 5"

# Generamos la consulta, es importante obviar los nombres de columna
IPS=(`echo "$SQL" | mysql -u $MYSQL_USER --password=$MYSQL_PASSWORD -h $MYSQL_HOST --skip-column-names`)

# La consulta obtendrá todos los datos en un vector, por lo que sabiendo el número de columnas que hay en la tabla, podremos calcular las filas fácilmente

# DEBEMOS especificar cuál es el ancho de cada fila
COLUMNS=3

# Con el número de columnas, sacaremos cuántas filas hay
ROWS=$[${#IPS[@]} / $COLUMNS]

# Ponemos ciertos datos en pantalla
echo "TOTAL DE ELEMENTOS: "${#IPS[@]}
echo "COLUMNAS: "$COLUMNS
echo "FILAS: "$ROWS

# Recorremos el array para verlo visualmente todo
for (( i=0; i<$ROWS; i++ ));
do
        for (( j=0; j<$COLUMNS; j++ ));
        do
# El número del elemento (ELEM), podemos calcularlo a cada elemento, o ir incrementando en uno el valor de una variable
# cada vez que leamos un elemento, aunque esta forma me parece más comprensible y escalable.
                ELEM=$[$i * $COLUMNS + $j]
# Ponemos en pantalla el elemento, sin saltar de línea, entrecomillándolo, para que veamos claramente que está delimitado
                echo -n "${IPS[$ELEM]}" -
        done
# Cuando hemos dibujado una fila de la tabla, saltamos de línea dos veces
        echo -e "\n\n"
done

# Reestablecemos el valor del $IFS a como estaba antes.
IFS=OLDIFS

El resultado de este código es:

«DEMASIADAS NOCHES SIN TI» -«http://megasalva.blogspot.com/2012/02/demasiadas-noches-sin-ti.html» -«Miles de piedras pequeñas» –

«Colllor, descubre las variables de cualquier color» -«http://checkapps.blogspot.com/2012/02/colllor-descubre-las-variables-de.html» -«CheckApps» –

«Hay serios problemas con ‘The Last Guardian’» -«http://feedproxy.google.com/~r/ElPixelIlustre/~3/BYugmHpDOuo/hay-serios-problemas-con-the-last-guardian.html» -«El Pixel Ilustre» –

«Rebuild, estrategia por turnos y zombis» -«http://feedproxy.google.com/~r/ElPixelIlustre/~3/oN0SmK6PHRI/rebuild-estrategia-por-turnos-y-zombis.html» -«El Pixel Ilustre» –

«Introducción al 3d con Blender 2.5 Parte II» -«https://taito3d.wordpress.com/2011/12/09/introduccion-al-3d-con-blender-2-5-parte-ii-2/» -«taito3dtutorial» –

Este es sólo un pequeño ejemplo, pero podemos extenderlo mucho más allá.

Foto: NightRStar (Flickr) CC-by a 20/08/2012

También podría interesarte....

There are 4 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Pingback: BlogESfera.com /

  3. Pingback: Hacer funcionar tu viejo ordenador de router, y filtrar por dirección MAC | Poesía Binaria /

  4. Andrew Mark /
    Usando Google Chrome Google Chrome 119.0.0.0 en Windows Windows NT

    This is the one of the most important information for me. And I am feeling glad reading your article. The article is really excellent?
    Rick Jacket Walking Dead

Leave a Reply