Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Generar un archivo csv con 3 tablas en mysql

Estas en el tema de Generar un archivo csv con 3 tablas en mysql en el foro de PHP en Foros del Web. Hola es mi primer post en el foro tengo grandes expectativas de que puedan ayudarme con esta tema que me tiene un poco loco de ...
  #1 (permalink)  
Antiguo 20/04/2016, 00:46
Avatar de enzone_10  
Fecha de Ingreso: abril-2016
Mensajes: 4
Antigüedad: 8 años
Puntos: 0
Generar un archivo csv con 3 tablas en mysql

Hola es mi primer post en el foro tengo grandes expectativas de que puedan ayudarme con esta tema que me tiene un poco loco de hace unos días y que no he podido resolver.

bueno este es el problema, necesito crear un archivo csv para subir posterior poder subir una carga masiva de datos a una pagina x, esta pagina tiene normas para crear el archivo en casos especiales que seria cuando hay otro impuesto o mas de 1 iva no recuperable entonces tengo que unir 3 tablas una contiene la mayoria de datos de nombre "datos" y las otras 2 iva_no recuperable y otro impuesto.


Código:
tabla datos 
ID   | USUARIO     | COMPRA_VENTA         | MNT_IVA   | MNT_TOTAL  |  PERIODO
54   |    5        |        Compra        |  1900     |   10000   |    '04-2016'
55   |    5        |        Compra        |  2666     |   25000   |    '04-2016'
56   |    5        |        Compra        |  2566     |   24580   |    '04-2016'
57   |    5        |        Compra        |  300      |   15000   |    '04-2016'
58   |    5        |        Compra        |  4500     |   40360   |    '04-2016'
59   |    5        |        Compra        |  3000     |   17000   |    '04-2016'

Código:
tabla iva_no_recuperable
ID   | ID_DATOS    | COD_IVA_NO_REC       | MNT_IVA_NO_REC  
1   |    25        |          2           |  1900     
2   |    38        |          4           |  2666     
3   |    58        |          3           |  11111    
4   |    59        |          4           |  333     
5   |    59        |          3           |  444
Código:
tabla otro_impuesto
ID   | ID_DATOS  |         COD_IMP         | TASA_IMP    | MNT_IMP  
1   |    3         |          23           |  15         |   100
2   |    5         |          25           |  1.5        |   150
3   |    6        |          20           |  15         |   900
4   |    7        |          28           |  1.93       |   800
5   |    58        |          29           |  15          |   4444
6   |    58        |          51           |  1.93        |   5555

necesito que quede como en esta imagen, que en el caso de haber 1 iva no_recuperable lo muestre en su fila correspondiente pero si hay mas de uno que repita los datos comunes de la tabla datos y se agregue el código del iva no recuperable y el monto en una nueva fila, es exactamente lo mismo cuando hay 1 o mas otro_impuesto.



en mi consulta sql uso el left join y la muestra de datos es casi como la necesito pero no falta un poco

Código MySQL:
Ver original
  1. SELECT d.ID AS 'ID',
  2. d.USUARIO AS 'CLIENTE',
  3. d.COMPRA_VENTA AS 'Compra Venta',
  4. IF(d.MNT_IVA>0,MNT_IVA,null) AS 'Monto IVA (Recuperable)',
  5. n.COD_IVA_NO_REC AS 'Codigo IVA no Rec',
  6. n.MNT_IVA_NO_REC AS 'Monto IVA no Rec',
  7. d.MNT_TOTAL AS 'Monto Total',
  8. o.COD_IMP AS 'Codigo otro impuesto',
  9. o.TASA_IMP AS 'Tasa otro impuesto',
  10. o.MNT_IMP AS 'Monto otro impuesto'
  11. FROM datos d
  12. LEFT JOIN no_recuperable n ON   d.ID = n.ID_DATOS
  13. LEFT JOIN otro_impuesto  o ON   d.ID = o.ID_DATOS
  14. WHERE USUARIO=5 AND COMPRA_VENTA='Compra' AND PERIODO='04-2016'


este es mi PHP que genera el csv
Código PHP:
Ver original
  1. <?php
  2. // Emular register_globals on  
  3. if (!ini_get('register_globals')) {  
  4.     $superglobales = array($_SERVER, $_ENV,  
  5.         $_FILES, $_COOKIE, $_POST, $_GET);  
  6.     if (isset($_SESSION)) {  
  7.         array_unshift($superglobales, $_SESSION);  
  8.     }  
  9.     foreach ($superglobales as $superglobal) {  
  10.         extract($superglobal, EXTR_SKIP);  
  11.     }  
  12. }
  13. if($_SESSION['est']!='1'){
  14.   header('location:index.php');
  15. }
  16. include('../mysql.php');
  17. $db = new MySQL();
  18. $periodo = $_GET['p'];
  19. $tipo = $_GET['t'];
  20. $hora_actual = date('dmyhi');
  21. $file=$hora_actual.'-'.$periodo.'.csv';
  22. //header to give the order to the browser
  23. header('Content-Type: text/csv');
  24. header('Content-Disposition: attachment;filename="'.$file.'";');
  25.  
  26. $RZ_SOC = 'Razón Social';
  27. utf8_decode($RZ_SOC);
  28. //select table to export the data
  29. $usuario =$_GET['u'];
  30.  
  31. $select_table= $db->consulta("SELECT d.ID AS 'ID',
  32. d.USUARIO AS 'CLIENTE',
  33. d.COMPRA_VENTA AS 'Compra Venta',
  34. IF(d.MNT_IVA>0,MNT_IVA,null) AS 'Monto IVA (Recuperable)',
  35. n.COD_IVA_NO_REC AS 'Codigo IVA no Rec',
  36. n.MNT_IVA_NO_REC AS 'Monto IVA no Rec',
  37. d.MNT_TOTAL AS 'Monto Total',
  38. o.COD_IMP AS 'Codigo otro impuesto',
  39. o.TASA_IMP AS 'Tasa otro impuesto',
  40. o.MNT_IMP AS 'Monto otro impuesto'
  41. FROM datos d
  42. LEFT JOIN no_recuperable n ON   d.ID = n.ID_DATOS
  43. LEFT JOIN otro_impuesto  o ON   d.ID = o.ID_DATOS
  44. WHERE USUARIO='".$usuario."' AND COMPRA_VENTA='".$tipo."' AND PERIODO='".$periodo."' ORDER BY ID" );
  45.  
  46. $rows = $db->fetch_assoc($select_table);
  47.  
  48. if ($rows)
  49. {
  50. getcsv(array_keys($rows));
  51. }
  52. while($rows)
  53. {
  54. getcsv($rows);
  55. $rows = $db->fetch_assoc($select_table);
  56. }
  57. // get total number of fields present in the database
  58. function getcsv($no_of_field_names)
  59. {
  60. $separate = ';';
  61. // realizar la acción de todos los nombres de campo como nombre de campo
  62. foreach ($no_of_field_names as $field_name)
  63. {
  64. if (preg_match('/\\r|\\n|,|"/', $field_name))
  65. {
  66. $field_name = '' . str_replace('', $field_name) . '';
  67. }
  68.         echo  $field_name.$separate ;
  69.  
  70. //separar con punto y coma
  71. $separate = ';';
  72. }
  73.  
  74. //make new row and line
  75. echo "\r\n";
  76. }
  77. //}
  78.  
  79. ?>


este es el resultado es similar pero en el excel de arriba es como lo necesito realmente


Espero entiendan mi problema y me ayuden que llevo varios días intentándolo y no me resulta.
  #2 (permalink)  
Antiguo 20/04/2016, 13:47
Avatar de enzone_10  
Fecha de Ingreso: abril-2016
Mensajes: 4
Antigüedad: 8 años
Puntos: 0
Respuesta: Generar un archivo csv con 3 tablas en mysql

alguien que me de algun indicio de como resolverlo?
  #3 (permalink)  
Antiguo 20/04/2016, 14:28
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Generar un archivo csv con 3 tablas en mysql

utiliza fputcsv para crea el archivo
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: csv, mysql, select, sql, tabla, tablas
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 22:40.