javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

lunes, 26 de mayo de 2008

Exportar el resultado de una consulta a un archivo en MySQL

En unos cuantos posts anteriores publiqué como podíamos cargar la información de un archivo a una tabla. Pues el día de hoy voy a explicar como podemos enviar el resultado de una consulta a un archivo.

Al igual que el comando LOAD DATA, nuestra cuenta de usuario de MySQL necesita el privilegio global FILE. Para poder asignarlos pueden consultar el artículo que mencioné anteriormente, ya qué allí menciono como podemos asignar los privilegios necesarios.

Una vez que contamos con los permisos, ahora en el prompt de mysql, ejecutaremos la consulta que deseamos enviar a nuestro archivo, con la única diferencia que especificaremos el archivo de salida y delimitador de campos. Para ejemplificar esto, pondré una consulta de la tabla pais en el archivo /tmp/pais.txt y los campos los limitaré por un tabulador.

mysql> SELECT * INTO OUTFILE '/tmp/pais.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' FROM pais;

Es importante mencionar que el archivo creado de esta forma, pertenece al usuario mysql, es por este motivo que indiqué que el archivo se guardara en el directorio /tmp.

Como podrán observar, es muy sencillo exportar datos a un archivo, por lo que espero que no tengan ningún problema al hacerlo.

8 comentarios:

Anónimo dijo...

Gracias llevaba rato buscando, me saas de un lio.. abrazos.

Anónimo dijo...

MySQL ha dicho:

#1 - Can't create/write to file '\tmp\result.csv' (Errcode: 13)

Hola, me da este error al ejecutar esta consulta, puedes ayudarme??:

SELECT *
INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
FROM empresa

javoaxian dijo...

Hola, el problema por lo que alcanzo a ver es que tienes permisos para poder escribir en el directorio /tmp/, prueba dandole todos los permisos de escritura a ese directorio.

En la página de MySQL mencionan algo referente a ese error. Aquí te pongo algunos enlaces:

Enlace 1
Enlace 2
Enlace 3
Enlace 4
Enlace 5

Si no te funcionan esos enlaces, comentalo y buscamos otra solución. También si puedes mencionar en que sistema operativo lo estas haciendo.

Saludos!!!

Anónimo dijo...

Hola Javoaxian, entiendo que es un problema de permisos en el directorio tmp.
El Sistema Operativo es Windows XP
Y la pregunta es como hago para modificar los permisos, lo puede hacer desde la consola Mysql, o utilizar la herramienta Mysql Administrator?.
He quitado el solo lectura que tenia la carpeta en windows, pero sigue sin funcionar.
Gracias!!

Anónimo dijo...

Hola Javoaxian, agregue el usuario 'Todos' en accesos a la carpeta /tmp/ y ya no me da error la 1ª vez que ejecuto la consulta, pero si quiero volver a ejecutarla me dice:
File '/tmp/result1.csv' already exists, por lo que he leido, para la sentencia into outfile el archivo no debe existir, sabes como puedo hacer para actualizarlo y evitar este error???.

Saludos, Sonia

javoaxian dijo...

Hola Sonia, lo que se me ocurre es que antes que hagas el SELECT INTO OUTFILE borres el archivo si es que existe en el directorio, que en tu caso sería borrar el archivo result1.csv que se encuentra en el directorio /tmp

Anónimo dijo...

Hola Javoaxian;

Al final pude generar el fichero .xls, utilizando este codigo:


require_once("excel.php");
require_once("excel-ext.php");

$conEmp = mysql_connect("localhost", "user", "password");
mysql_select_db("demo", $conEmp);
$queEmp = "SELECT nombre, direccion, telefono FROM empresa";
$resEmp = mysql_query($queEmp, $conEmp) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);

while($datatmp = mysql_fetch_assoc($resEmp)) {
$data[] = $datatmp;
}
createExcel("excel-mysql.xls", $data);
exit;


Gracias por las ayudas.

Sonia

javoaxian dijo...

Hola Sonia, que bueno que ya lo pudiste solucionar. Muchas gracias por tu aporte.