• User Newbie

    Query in mysql

    Salve prima di tutto mi presento
    Praticamente alla prime armi spero in vostro cortese aiuto.

    La mia richiesta:
    Tabella con nome dipendente cognome data cantiere e le ore giornaliere
    mi occorre una query che inserendo un intervallo temporale e il cognome dipendente mi visualizzi il dipendente (Cognome e nome) e la somma di tutte le ore nell'intervallo temporale.

    Controllando sono riuscito a creare una query che mi visualizza tutto nell'intervallo temporale da me definito.

    Grazie per l'eventuale aiuto.


  • Consiglio Direttivo

    Ciao vinny74 e benvenuto nel Forum GT. 🙂

    Dovrai selezionare i record inserendo nella clausola WHERE anche la corrispondenza del Cognome, oltre che l'estrazione per intervallo di date, e nella selezione fare la somma del campo ore delle corrispondenze trovate:

    [php] $sql="SELECT cognome, nome, SUM(ore) as total FROM tabella WHERE (data<'$datasuperiore' AND data>'$datainferiore') AND cognome='$cognome'";[/php]Estraendoti il valore di total, questo sarà il totale ore lavorate da quel cognome nell'intervallo temporale da te indicato.

    Mi permetto però un piccolo accorgimento che farei al posto tuo.
    Se hai due dipendenti con lo stesso cognome? Ti sommerà le ore di entrambi. 😉

    Ti consiglierei, all'atto della ricerca, di selezionare il dipendente tramite un menu a tendina (<select>) costruito in automatico prelevando i dati dal Db, ed associare alle <option> il valore dell'id record e quindi lavorare con quello, l'id utente è univoco. 😉

    [php] $sql="SELECT cognome, nome, SUM(ore) as total FROM tabella WHERE (data<'$datasuperiore' AND data>'$datainferiore') AND id='$id'";[/php]Spero ti torni utile. 🙂

    :ciauz:

    EDIT: questa soluzione però prevede che l'anagrafica dipendente sia una tabella a se. Personalmente credo sia la soluzione migliore, nella tabella con ore, cantiere, data inserirai semplicemente l'id utente.


  • User Newbie

    Devo quindi creare due tabelle una dipendenti
    tre campi
    IdDipendente
    Cognome
    Nome

    e l'altra ore

    con i seguenti campi

    IdDipendente
    Data
    Cantiere
    Ore

    e devo relazionare

    gli IdDipendente

    Tutto giusto.
    Comunque grazie per la risposta proverò subito in questo modo.
    Grazie


  • Consiglio Direttivo

    Ti consiglierei di dare un Id per i record della tabella ore, dato che avrai più volte ripetuto l'id dipendente, quindi avresti difficoltà a recuperare un dato univoco nella tabella, se non facendo delle combinazioni tra dati. 😉

    Pertanto la tabella ore si presenterà:

    id (primary_key, auto-increment)
    idDipendente (numerico)
    data
    Cantiere
    Ore

    Così se domani dovrai far delle modifiche a qualche record ti basterà puntare all'id del record. 😉


  • User Newbie

    Grazie ci provo e vedo cosa succede


  • User Newbie

    Ok fatto ma il risultato è la somma delle ore di tutti i dipendenti anche quelli non inseriti nella scheda ore
    come risolvo


  • User Newbie

    Risolto errore nella difitazione della query.


  • User Newbie

    E se volessi restringere anche il campo cantiere?


  • Consiglio Direttivo

    Nel senso, totale ore legate al dipendente per un cantiere specifico?

    Nel caso ti basterà aggiungere nel WHERE la filtrazione per cantiere:
    [php]$sql="SELECT cognome, nome, SUM(ore) as total FROM tabella WHERE (data<'$datasuperiore' AND data>'$datainferiore') AND id='$id' AND cantiere='$cantiere'"; [/php]

    😉