Foros del Web » Programando para Internet » PHP »

Pasar de Mysql a csv

Estas en el tema de Pasar de Mysql a csv en el foro de PHP en Foros del Web. hola, tengo una base de datos en php y mysql, y ya tengo la forma de importar datos a mysql desde un archivo .csv, pero ...
  #1 (permalink)  
Antiguo 22/05/2006, 13:51
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
Pasar de Mysql a csv

hola, tengo una base de datos en php y mysql, y ya tengo la forma de importar datos a mysql desde un archivo .csv, pero lo que necesito ahora es hacer el proceso inverso, es decir pasar una consulta a .csv para luego poder importarla en otra terminal, porque desafortunadamente el cliente no tiene una red para poder compartir esta info
__________________
Say no more.......
  #2 (permalink)  
Antiguo 22/05/2006, 14:08
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Sólo debes leer los datos desde la BD como si fueras a mostrarlos en una pagina, pero en lugar de ello concatenas los valores en una variable, separando los valores de los campos por ;
  #3 (permalink)  
Antiguo 22/05/2006, 14:42
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
pero como haria esto para lograr que la misma aoplicacion me cree el archivo .csv?
__________________
Say no more.......
  #4 (permalink)  
Antiguo 22/05/2006, 15:03
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Ok, el ejemplo completo:

Código PHP:
<html>

<head>
  <title>Pasar a CSV</title>
</head>

<body>
<?php
   mysql_connect
("servidor","user","pass");
   
mysql_select_db("bd");
   
$sql="select * from tabla";
   
$rs=mysql_query($sql);
   
$datos="";
   if(isset(
$rs) && mysql_num_rows($rs)>0)
   {
       
//numero de filas y columnas de conjunto de datos
       
$nrows=mysql_num_rows($rs);
       
$ncols=mysql_num_fields($rs);
       
//se recorre el recordset fila a fila, campo a campo
       
for($i=0;$i<$nrows;$i++)
       {
          for(
$j=0;$j<$ncols;$j++)
             
//se concatenan os valores
             
$datos.=mysql_result($rs,$i,$j).";";
          
//se quita el ; sobrante y se añade un salto de linea
          
$datos=substr($datos,0,strlen($datos)-1)."\n";
       }
       
$archivo="archivo.csv";
       
//se pasa a un archivo, luego se crea un enlace
       
$fp=fopen($archivo,"w+");
       
fwrite($fp,$datos);
       
fclose($fp);
       
mysql_free_result($rs);
?>
    <a href="<?php echo $archivo;?>">Bajar archivo</a>
<?php

   
}
?>
</body>

</html>
  #5 (permalink)  
Antiguo 22/05/2006, 15:49
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
lo acxabo de probar y me dice:

Cita:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\archivos de programa\easyphp1-8\www\residuos\csv.php on line 16
y esta linea es:

Código PHP:
if(isset($rs) && mysql_num_rows($rs)>0
que significa?
__________________
Say no more.......
  #6 (permalink)  
Antiguo 22/05/2006, 16:02
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
ya, era que no estaba tomando bien la consulta pero ya esta, gracias
__________________
Say no more.......
  #7 (permalink)  
Antiguo 22/05/2006, 16:21
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
ok, bien, ya me genera el archivo, pero resulta que lo organiza en celdas y no en columnas y yo lo necesito en columnas para poder importarlo de nuevo a la bd
__________________
Say no more.......
  #8 (permalink)  
Antiguo 22/05/2006, 16:44
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
No entiendo lo que dices.
  #9 (permalink)  
Antiguo 22/05/2006, 16:58
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
lo que pasa es que cuando me genera el archivo .csv, pone los datos en una misma celda por lo cual cada dato ocupa una columna diferente, esto me da unas 100 columan, lo que yo necesito es que me ponga los datos en columnas es decir, muchas celdas pero una sola columna, en pocas palabras, de forma vertical
__________________
Say no more.......
  #10 (permalink)  
Antiguo 23/05/2006, 07:55
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
En que programa estás revisando el archivo csv? A mi en excel se me ve bien. Es decir, los datos se ven asi:

c1 c2 c3 c4
c1 c2 c3 c4
c1 c2 c3 c4
c1 c2 c3 c4
c1 c2 c3 c4
c1 c2 c3 c4
c1 c2 c3 c4

El notepad debería mostrarlos mal, dado que no reconoce el salto de línea (\n).
  #11 (permalink)  
Antiguo 23/05/2006, 10:34
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
los estoy mirando en excel
__________________
Say no more.......
  #12 (permalink)  
Antiguo 23/05/2006, 13:10
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Imagino que pusiste el ejemplo tal cual? Muestra tu implementación
  #13 (permalink)  
Antiguo 23/05/2006, 13:25
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
si, de hecho lo unico que cambie fue el sql, en todo caso aqui esta mi aplicacion

[php]

<?php
include('connect.php');
$mun=$_GET['mun'];
$sql="SELECT * FROM datos_admtivos INNER JOIN datos_municipio ON datos_municipio.cod_inst = datos_admtivos.cod_inst INNER JOIN manejo_residuos ON manejo_residuos.cod_inst = datos_admtivos.cod_inst INNER JOIN comp_interno ON comp_interno.cod_inst = datos_admtivos.cod_inst INNER JOIN comp_externo ON comp_externo.cod_inst = datos_admtivos.cod_inst INNER JOIN fuentes_generacion ON fuentes_generacion.cod_inst = datos_admtivos.cod_inst INNER JOIN procesos_eliminacion ON procesos_eliminacion.cod_inst = datos_admtivos.cod_inst INNER JOIN desactivacion_residuos ON desactivacion_residuos.cod_inst = datos_admtivos.cod_inst INNER JOIN resnopel_bio ON resnopel_bio.cod_inst = datos_admtivos.cod_inst INNER JOIN resnopel_rec ON resnopel_rec.cod_inst = datos_admtivos.cod_inst INNER JOIN resnopel_ine ON resnopel_ine.cod_inst = datos_admtivos.cod_inst INNER JOIN resnopel_ord ON resnopel_ord.cod_inst = datos_admtivos.cod_inst INNER JOIN respelin_bio ON respelin_bio.cod_inst = datos_admtivos.cod_inst INNER JOIN respelin_ana ON respelin_ana.cod_inst = datos_admtivos.cod_inst INNER JOIN respelin_cor ON respelin_cor.cod_inst = datos_admtivos.cod_inst INNER JOIN respelin_ani ON respelin_ani.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_far ON respequi_far.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_cit ON respequi_cit.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_mtp ON respequi_mtp.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_rea ON respequi_rea.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_cot ON respequi_cot.cod_inst = datos_admtivos.cod_inst INNER JOIN respequi_ace ON respequi_ace.cod_inst = datos_admtivos.cod_inst INNER JOIN respe_rad ON respe_rad.cod_inst = datos_admtivos.cod_inst AND datos_admtivos.cod_inst = '".$mun."'";
$rs=mysql_query($sql);
$datos="";
if(isset($rs) && mysql_num_rows($rs)>0)
{
//numero de filas y columnas de conjunto de datos
$nrows=mysql_num_rows($rs);
$ncols=mysql_num_fields($rs);
//se recorre el recordset fila a fila, campo a campo
for($i=0;$i<$nrows;$i++)
{
for($j=0;$j<$ncols;$j++)
//se concatenan os valores
$datos.=mysql_result($rs,$i,$j).";";
//se quita el ; sobrante y se añade un salto de linea
$datos=substr($datos,0,strlen($datos)-1)."\n";
}
$archivo="hospitalarios.csv";
//se pasa a un archivo, luego se crea un enlace
$fp=fopen($archivo,"w+");
fwrite($fp,$datos);
fclose($fp);
mysql_free_result($rs);
?>
<a href="<?php echo $archivo;?>">Bajar archivo</a>
<?php

}
?>

[php]
__________________
Say no more.......
  #14 (permalink)  
Antiguo 23/05/2006, 14:02
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Revisa que no sea sólo un problema de visualización de las columnas, es decir, sólo un problema de ancho de la columna.
  #15 (permalink)  
Antiguo 24/05/2006, 12:28
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
Cita:
Iniciado por claudiovega
Revisa que no sea sólo un problema de visualización de las columnas, es decir, sólo un problema de ancho de la columna.
como asi?
__________________
Say no more.......
  #16 (permalink)  
Antiguo 04/07/2006, 06:37
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 10 meses
Puntos: 1
Estoy tratando de obtener un archivo csv a partir de un query, no hay problema al generarlo, pero el caso es que me muestra el numero de filas completas, pero en una sola columna.
La consulta me devuelve las 23 filas, pero todas en la columna 1, si muevo el cursor a la columna [A2], [B2], [C2], [D2], [E2], etc, estas no muestran contenido.
Estoy tratando de crear una tabla para luego generar el csv, mediante explode($datos,';'); pero no logro hacerlo.
Alguna ayuda por favor???
__________________
:adios:
  #17 (permalink)  
Antiguo 04/07/2006, 07:00
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 23 años, 5 meses
Puntos: 20
publica tu script a ver si en algo te puedo ayudar
__________________
Say no more.......
  #18 (permalink)  
Antiguo 04/07/2006, 07:15
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 10 meses
Puntos: 1
Si bien ya logre ponerlo en una tabla, al momento de abrir el archivo, ahora solo me muestra una sola celda, la ultima de la consulta.
Código PHP:
<?    if(isset($rs) && mysql_num_rows($rs)>0)
   {
       
//numero de filas y columnas de conjunto de datos
       
$nrows=mysql_num_rows($rs);
       
$ncols=mysql_num_fields($rs);
       echo 
$select;
       echo 
'<br>filas:'.$nrows;
       echo 
'<br>cols:'.$ncols.'<br>';
       
//exit;
       //se recorre el recordset fila a fila, campo a campo
       
echo '<table border=1>';
       for(
$i=0;$i<$nrows;$i++)
       {
          echo 
'<tr>';
          for(
$j=0;$j<$ncols;$j++)
          
//se concatenan los valores
              
echo '<td>'.$datos=mysql_result($rs,$i,$j).',</td>';
              echo 
'</tr>';
          
//se quita el ; sobrante y se añade un salto de linea
       
}
       echo 
'</table>';
       
$archivo="archivo.csv";
       
//se pasa a un archivo, luego se crea un enlace
       
$fp=fopen($archivo,"w+");
       
fwrite($fp,$datos);
       
fclose($fp);
       
mysql_free_result($rs);
?>
    <a href="<?php echo $archivo;?>">Bajar archivo</a>
<?php

   
}
__________________
:adios:
  #19 (permalink)  
Antiguo 04/07/2006, 07:28
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 10 meses
Puntos: 1
aunque, pensandolo bien, lo que yo necesito para que se lea correctamente el archivo es que este separado por comas...cierto???
__________________
:adios:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:50.