Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    da tabella excel a tabella mysql

    se io ho un file di excel che non rispecchia esattamente la struttura della mia tabella in mysql, è possibile leggere quel file, riga per riga ed inserire solo ciò che mi interessa nel database?

    partiamo però un pò più indietro, se io invece ho un file che rispecchia esattamente la mia struttura, come inserisco riga per riga quel file nel mio db?ok, devo aprire il file, leggerlo ed inserire i dati nel db, ma come si fa? c'è un tutorial o qualcosa? io non trovo niente...


    grazie mille!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    In genere io salvo i file excel in formato .csv (con delimitatore punto e virgola) e poi li leggo così:

    Codice PHP:
    $fp fopen("file_excel.csv""r");
    while (!
    feof ($fp))
      {
      list(
    $campo1$campo2$etc$etc) = fgetcsv($fp4096";");

      ... 
    faccio quello che devo fare
      


  3. #3
    il file di excel lo davi salvare in .csv, Poi lo carichi con LOAD DATA INFILE.

    ovviamente devi organizzarti i separatori di campo e di record. i campi devono corrispondere, oppure possono essere chiamati ordinati,
    es.: hai 5 campi su excel e 8 su mysql, dovrai mettere la lista dei 5 campi di mysql tenendo presente l'ordine in cui sono presentati in excel.

    Personalmente dopo tante prove ho adottato il seguente metodo: Salvo da excel(o foglio elettronico qualsiasi, uso openoffice) su file di testo, LOAD DATA INFILE su una tabella intermedia. Verifico i dati, ottimizzo il formato dei campi se necessario e poi trasferisco tra tabelle. Questo se attivita' manuale.

    Il problema e' che se automatizzato un errore potrebbe sballarti la tabella intera. Per evitare questo prima apro il file, lo carico in un array, controllo e conto la presenza dei separatori di campo e record, elimino gli spazi eccedenti, verifico non ci siano puttanate iniettate, e passo stringa per stringa alla query insert. Se il record non passa il test lo scarto in un array che visualizzo alla fine.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    ragazzi vi ringrazio! appena ho un attimo provo e se dovessi avere altri problemi state pur sicuri che vi romperò ancora




    grazie ancora
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  5. #5
    buon pomeriggio, sono tornato sull'argomento proprio oggi, sinceramente non ho molto ben capito l'iter da seguire, quindi vi faccio un esempio di quello che ho io:

    questo è uno screendshot del file di excel che ho io:


    mentre di seguito riporto il dump delle tabelle coinvolte:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 2.6.1
    -- http://www.phpmyadmin.net
    -- 
    -- Host: localhost
    -- Generato il: 01 Lug, 2005 at 03:20 PM
    -- Versione MySQL: 4.0.23
    -- Versione PHP: 4.3.10
    -- 
    -- Database: `lepo`
    -- 
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `comuni`
    -- 
    
    CREATE TABLE `comuni` (
      `id_comune` int(10) unsigned NOT NULL auto_increment,
      `comune` varchar(50) NOT NULL default '',
      `id_provincia` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_comune`)
    ) TYPE=MyISAM AUTO_INCREMENT=20 ;
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `nazioni`
    -- 
    
    CREATE TABLE `nazioni` (
      `id_nazione` int(10) unsigned NOT NULL auto_increment,
      `nazione` varchar(25) NOT NULL default '',
      PRIMARY KEY  (`id_nazione`)
    ) TYPE=MyISAM AUTO_INCREMENT=6 ;
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `province`
    -- 
    
    CREATE TABLE `province` (
      `id_provincia` int(10) unsigned NOT NULL auto_increment,
      `provincia` varchar(25) NOT NULL default '',
      `sigla` varchar(5) NOT NULL default '',
      `id_regione` int(11) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_provincia`)
    ) TYPE=MyISAM AUTO_INCREMENT=13 ;
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `punti_vendita`
    -- 
    
    CREATE TABLE `punti_vendita` (
      `id_punto` int(10) unsigned NOT NULL auto_increment,
      `nome` varchar(255) NOT NULL default '',
      `indirizzo` varchar(255) NOT NULL default '',
      `telefono` varchar(50) NOT NULL default '',
      `e_mail` varchar(150) NOT NULL default '',
      `cap` varchar(5) NOT NULL default '',
      `id_comune` int(10) unsigned NOT NULL default '0',
      `id_provincia` int(10) unsigned NOT NULL default '0',
      `id_regione` int(10) unsigned NOT NULL default '0',
      `id_nazione` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_punto`)
    ) TYPE=MyISAM AUTO_INCREMENT=22 ;
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `regioni`
    -- 
    
    CREATE TABLE `regioni` (
      `id_regione` int(10) unsigned NOT NULL auto_increment,
      `regione` varchar(25) NOT NULL default '',
      `id_nazione` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_regione`)
    ) TYPE=MyISAM AUTO_INCREMENT=4 ;
    quindi la tabella in excel mi "coinvolge" tutte queste tabelle, quindi io dovrei inserire prima nazione, regione, provincia, comune nelle relative tabelle (se mancanti) e poi prendere i rispettivi id e piazzarli nella macro [si fa per dire ] tabella dei punti vendita.

    io proprio non capisco come poter far una cosa del genere, voi mi sapete dare un aiuto? è possibile farlo dovendo coinvolgere tutte quelle tabelle e avendone una sola in excel?




    grazie mille per un eventuale aiuto!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    Assolutamente no. Devi fare una tabella di appoggio dove andrai a riversare tutto il file .csv

    A questo punto con INSERT ... SELECT prendi tabella per tabella quello che serve. Cominciando ovviamente dalla tabella padre, cioe' quella che non ha riferimenti di chiavi esterne. Quindi nazione -> regione -> province -> ecc....

    Sono proprio questi riferimento che ti costringono a fare questo passaggio. La stessa tabella di appoggio la potrai usare per il procedimento inverso (molto piu' facile in verita') cioe' di prendere dalle tabelle per esportare in excel.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    visto che i record da inserire sono 700 [punti vendita] sommando gli altri si arriverà circa al migliaio, se non di più, mi conviene inserirli tutti a mano o dici che è meglio provare a renderlo automatico? perché proprio io non so come fare...

    quando parli di tabella di appoggio cosa intendi?come la dovrei organizzare? la tabella sarà un csv o un sql? ti chiedo tutte queste cose perchè è un lavoro piuttosto importante e prima di inizare vorrei aver la certezza di non fare cazzate

    se avessi capito come creare la tabella di appoggio proverei con dei dati fittizzi, ma proprio non riesco a capire come operare.
    andando per tentativi io direi che mi devo creare diverse tabelline la cui struttura è identica alle mie in sql, o sbaglio?
    cioè, oh, sono nell crisi più totale


    thx
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    La tabella di appoggio dovrebbe avere tutti i campi della tabella excel. Stessa posizione, stesso nome stesso tipo. In questo modo esportare importare diventa semplice.

    Quando i dati saranno in questa tabella sul database, potrai distribuirli come ti pare. Intanto verifiche che il formato dei dati non abbia subito danni/variazioni, il charset vada bene... ecc...

    Iniziando poi dalla tabella nazioni farai un INSERT ... SELECT dei campi che interessano. ci saranno i campi id che verranno incrementati e che non sono presenti.

    La tabella successiva regioni idem. Il campo id viene incrementato da se, l'id nazione lo beccherai con un left join del select nella tabella nazioni. un esempio:
    codice:
    INSERT INTO regioni
    (regione, id_nazione)
    SELECT a.regione, n.id_nazione
    from appoggio a
    left join nazioni n
    ON a.nazione = n.nazione
    Order by a.regione
    E poi via via andando a prendere le tabelle successive. Non ho capito pero' se i dati nazione ecc... sono tutti presenti nel foglio excel oppure no. Ad ogni modo un idea di come fare il lavoro potrebbe essere questa che ti ho detto. La tabella di appoggio va poi sempre ripulita e una volta realizzate le query necessarie diventa facile automatizzare il tutto con uno script.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    penso di aver capito a grandi linee, faccio un pò di prove con dei dati inventati e poi procedo con il lavoro.

    se dovessi avere dei problemi stai pur sicuro che mi rifaccio vivo


    Grazie mille per tutte le dritte!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.