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 5 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. Mike Rooney /
    Usando Google Chrome Google Chrome 116.0.0.0 en Windows Windows NT

    Your blog provided us with valuable information. I am looking forward to read more blog posts from here keep it up!!And Just Like That Carrie Bradshaw Green Jacket

  5. Andrew Mark /
    Usando Google Chrome Google Chrome 116.0.0.0 en Windows Windows NT

    Excellent article. The writing style which you have used in this article is very good and it made the article of better quality.
    Freddie Mercury Yellow Jacket

Leave a Reply to Andrew Mark Cancle Reply