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 3 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 /

Leave a Reply