• User Newbie

    Excel - php - mysql

    Un saluto a tutti,

    premetto che sono nuovo di questo mondo e che mi ci ritrovo per esigenze lavorative, quindi vi prego se sbaglio non mandatemi a quel paese....

    ho da qualche giorno iniziato a lavorare per un'azienda che si occupa della distribuzione di cosmetici, il mio capoarea mi ha affidato il compito di storicizzare in un database mysql tutti i dati delle vendite che attualmente sono presenti in vari fogli di excel (ad ogni mese dal gennaio 2006 a ottobre 2008 corrisponde un foglio excel).

    Il file contiene le seguenti colonne:

    IdOrdine : campo che identifica l'ordine prodotto dalla centralinista
    IdCentralinista: che è il suo codice personale
    Cognome: cognome della centralinista
    Nome: nome della centralinista
    Cliente: numero di telefono del cliente che ha fatto l'ordine
    Descrizione di eventuale consegna rifutata se andata a buon fine è scritto ASSENTE
    Il gruppo al quale appartine il cliente Costante - Nuovo - Incostante
    Provenienza Cliente: Internet - CallCenter - Venditore
    Stato Cliente: Prima chiamata - Seconda Chiamata - Mai chiamato
    Data Inserimento Ordine
    Data Consegna Ordine
    Fatturato con iva
    Fatturato senza iva
    Consegnato con iva
    **Consegnato senza iva **
    N.ro ordini prodotti nel mese dalla centralinista

    Ad ogni riga del file Excel corrisponde un ordine prodotto dalla centralinista, quindi se la centralinista in un mese produce 100 ordine mi ritrovero ad avere 100 righe con lo stesso IdCentralinista: Cognome: Nome:

    Vorrei creare un'applicativo web scritto in php che mi dia la possibilità di importare i dati contenuti nel foglio excel in un database mysql...

    Come potrei ovviare questo problema?
    Tenendo in considerazione anche che in un mese le centraliniste erano 30 magari il mese successivo 25 e l'altro ancora 50, quindi non avendo dati costanti?

    Alla fine una volta importati i dati, ho la necessità di raggruppare gli ordini prodotti dalle operatrici, avendo un report per ognuna di loro, che mi dica quanti ordini hanno prodotto da data a data, quanti ne sono stati consegnati, quanto fatturato hanno prodotto e calcolare in base a determinati criteri delle provvigioni...

    Confido in voi per questo miracolo.

    Saluti
    Alessandro.

    P.S
    naturalmente questa richiesta è solo per avere degli input su come impostare il tutto al fine di raggiungere lo scopo prefissato....


  • User Attivo

    Si tratta di un lavoro una tantum (es. una volta fatto l'import dello storico, tutti i nuovi dati verranno inseriti nel DB MySQL, magari tramite una interfaccia web)?
    Oppure si tratta di un lavoro che devi fare con una certa regolarità (es. una volta al mese devi eseguire l'import dei dati del mese precedente)?


  • User Newbie

    [...]

    Ciao,
    il lavoro va fatto tutti i mesi, in effetti la sede centrale a fine mese trasmette i dati in formato xls, io li dovrei prima importare in mysql, poi da li fare i conteggi...
    Quindi è un lavoro che dovro fare tutti i mesi, storicizzando tutti gli ordini...

    Ciao
    Alessandro....


  • User Attivo

    Se puoi, cerca di lavorare su un file CSV oppure con i campi separati da tabulazione, cercando di mantenere sempre lo stesso formato (ordine dei campi). Manipolare dei file testuali è molto più semplice e veloce che dover avere a che fare con formati binari (o anche open doc) di Microsoft.

    A parte ciò, dovresti partire progettando il database. Sicuramente avrai due tabelle: centraliniste e ordini, collegate con un foreign key idcentralinista. Tutto questo per rispettare le regole di normalizzazione.

    A partire da dati testuali, puoi utilizzare explode, foreach, etc. per effettuare un parsing preliminare ed ottenere degli array contenenti i campi di ogni riga. L'import dei dati dovrebbe partire con quelli della centralinista (in modo da gestire correttamente la chiave esterna) e poi inserendo i dati dell'ordine.

    IMHO è piuttosto semplice da implementare, probabilmente devi spendere un po' di tempo perfezionando il codice del parser in modo da renderlo adatto a tutti i tipi di input ed in grado di gestire eventuali errori.


  • User Newbie

    Come ti dicevo nel mio primo posto io sono un principiante in tale linguaggio e avrei bisogno di una mano passo - passo per capire cosa fare e in che ordine farlo...

    Da quello che ho capito, mi suggerisci di iniziare a strutturare il database, perfetto, prima di farlo volevo farti dare un'occhiata alla struttura che pensavo di dare ad esso, comprensiva di relazioni....

    non sapendo come inserire l'immagine te la invio tramite posta elettronica e poi casomai se ti farà piacere aiutarmi provvederai tu a pubblicarla...

    Ciao
    Alessandro!


  • User Attivo

    Questo è giusto un abbozzo di quella che potrebbe essere la struttura del DB. Molto dipende dalle necessità, potresti anche gestire tutto con una tabella denormalizzata magari ottimizzando un po' gli indici.

    [php]CREATE TABLE centraliniste (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    cognome VARCHAR(255) NULL,
    nome VARCHAR(255) NULL,
    PRIMARY KEY(id)
    );

    CREATE TABLE clienti (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    cliente INTEGER UNSIGNED NULL,
    gruppo INTEGER UNSIGNED NULL,
    provenienza INTEGER UNSIGNED NULL,
    stato INTEGER UNSIGNED NULL,
    PRIMARY KEY(id)
    );

    CREATE TABLE ordini (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    centralinista_id INTEGER UNSIGNED NOT NULL,
    cliente_id INTEGER UNSIGNED NOT NULL,
    consegna VARCHAR(255) NULL,
    stato_cliente VARCHAR(255) NULL,
    data_inserimento DATE NULL,
    data_consegna DATE NULL,
    anno INTEGER UNSIGNED NULL,
    mese INTEGER UNSIGNED NULL,
    fatturato_ivato INTEGER UNSIGNED NULL,
    fatturato INTEGER UNSIGNED NULL,
    consegnato_ivato INTEGER UNSIGNED NULL,
    consegnato INTEGER UNSIGNED NULL,
    PRIMARY KEY(id),
    INDEX ordini_FKIndex1(cliente_id),
    INDEX ordini_FKIndex2(centralinista_id),
    INDEX ordini_mesi(anno, mese)
    );[/php]


  • User Newbie

    [..]

    Ciao Filippo,
    ti ho inviato una posta all'indirizzo indicato in msn, potresti dare un'occhiata e farmi sapere cosa ne pensi 🙂

    Grazie!


  • User Attivo

    La struttura che mi hai inviato va bene. Tieni solo conto che durante l'importazione dovrai fare vari controlli sull'esistenza dei record nelle tabelle correlate. Ad esempio, se un cliente non è presente deve essere inserito in anagrafica prima di fare l'import dell'ordine, etc.


  • User Newbie

    [...]

    Ok, allora inizio con il creare la struttura del DB in mysql, poi provo ad importare i dati...

    per l'importazione trovo una guida esaustiva da qualche parte nel forum immagino.... :mmm:

    Grazie
    Ale!