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
¿Cómo obtener el tamaño de las tablas en MySQL? Y alguna idea para nuestros servidores
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
17cuando hagamos:
1Veremos 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
Numerar los resultados de un SELECT en MYSQL
Este ejemplo puede tener muchas utilidades. Por ejemplo, que queramos generar automáticamente campos ID (sin autoincrement), tanto empezando en 1 como empezando en el número que queramos o realizar alguna operación matemática con ese número; en definitiva vamos a introducir un número incremental a cada resultado que nos devuelva.
Imaginamos que tenemos una tabla `Emails` donde tengo correos electrónicos y nombres de varios amigos. Para crear la estructura, copiar y pegar en MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18DROP SCHEMA IF EXISTS `PoesiaBinaria` ;
CREATE DATABASE IF NOT EXISTS `PoesiaBinaria` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `PoesiaBinaria`;
CREATE TABLE `Emails` (
`Email` VARCHAR(100) NOT NULL,
`Nombre` VARCHAR(200) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Pedro', 'pedro@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Javier', 'javier@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Gaspar', 'gaspar@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Maria', 'maria@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Sandra', 'sandra@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Andrea', 'andrea@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Clara', 'clara@misamigos.com');
INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Andres', 'andres@misamigos.com');Ahora puedo extraer datos de dicha tabla:
Que me devuelve:
+——–+———————-+
| Email | Nombre |
+——–+———————-+
| Pedro | pedro@misamigos.com |
| Javier | javier@misamigos.com |
| Gaspar | gaspar@misamigos.com |
| Maria | maria@misamigos.com |
| Sandra | sandra@misamigos.com |
| Andrea | andrea@misamigos.com |
| Clara | clara@misamigos.com |
| Andres | andres@misamigos.com |
+——–+———————-+
8 rows in set (0.00 sec)Ahora bien, para numerar los resultados podemos hacer lo siguiente:
Introducir el resultado de una consulta SELECT de mysql en un Array [BASH]
¡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.
… Leer artículo completo1
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.Accediendo a bases de datos MySQL desde C++
Muchos estamos acostumbrados a utilizar bases de datos en PHP pero cuando se trata de un programa de escritorio almacenamos los cambios en archivos sin contemplar esta posibilidad.
Usar una base de datos puede ser un gran aliado a la hora de hacer aplicaciones que almacenen gran cantidad de información o vayamos a acceder desde varios puntos a dicha información (programas multipuesto, por ejemplo).
También es de gran utilidad si construimos un software que haga más ligeras ciertas tareas dentro de un servidor web (necesitamos la posibilidad de ejecutar programas sobre el servidor y tal vez de compilarlos allí, pero es una opción bastante buena, en ocasiones un script puede ejecutarse de forma demasiado lenta.… Leer artículo completo
Creando un servidor que acepte múltiples clientes simultáneos en C
Para hacer una prueba de esto, crearemos un servidor al que nos podremos conectar por telnet y pedir cierta información a través de comandos. El ejemplo soporta los siguientes comandos (en mayúsculas):
- DATE: Pide la fecha al servidor
- TIME: Pide la hora al servidor
- HOLA: Saluda y me dice mi IP
- EXIT: Cierra el cliente actual
- CERRAR: Cierra el servidor.
- Cualquier otra cosa se manda repetida (ECHO)
… Leer artículo completo1
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267/**
*************************************************************
* @file servtcp.c
* @brief Breve descripción
* Ejemplo de un cliente TCP usando threads
*
*
* @author Gaspar Fernández <blakeyed@totaki.com>
* @version 0.1Beta
* @date 13 ene 2011
* Historial de cambios:
* 20110113 - Versión inicial
*
*
*************************************************************/
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
/** Puerto */
#define PORT 7000
/** Número máximo de hijos */
#define MAX_CHILDS 3
/** Longitud del buffer */
#define BUFFERSIZE 512
int AtiendeCliente(int socket, struct sockaddr_in addr);
int DemasiadosClientes(int socket, struct sockaddr_in addr);
void error(int code, char *err);
void reloj(int loop);
int main(int argv, char** argc){
int socket_host;
struct sockaddr_in client_addr;
struct sockaddr_in my_addr;
struct timeval tv; /* Para el timeout del accept */
socklen_t size_addr = 0;
int socket_client;
fd_set rfds; /* Conjunto de descriptores a vigilar */
int childcount=0;
int exitcode;
int childpid;
int pidstatus;
int activated=1;
int loop=0;
socket_host = socket(AF_INET, SOCK_STREAM, 0);
if(socket_host == -1)
error(1, "No puedo inicializar el socket");
my_addr.
Últimos comentarios