Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    [MySQL] Query su giorni dell'anno

    Cercando di semplificare, ho un'applicazione web in PHP+MySQL con due tabelle, dipendenti e orari in relazione uno a molti. In quest'ultima per ogni dipendente e per ogni giorno della settimana (da 1 a 7) ho gli orari di lavoro e il numero di ore da svolgere da contratto.

    codice:
    DIPENDENTI		ORARI
    ------------		------
    id PK			id PK
    cognome			id_dipendente chiave esterna
    nome			numero_giorno
    ....			orario_entrata
    			orario_uscita
    			totale_ore
    Mi serve una query che mi sommi, dipendente per dipendente, tutte le ore teoriche da svolgere in un periodo, ad esempio in una data precisa, un mese o un anno.
    In pratica il risultato dovrebbe essere:

    ANNO 2010:
    dipendente 1 5000 ore
    dipendente 2 2000 ore
    --------------------------
    TOTALE ore 7000 ore

    Per fare questo tipo di query devo prendere tutti i giorni dell'anno (o di un lasso di tempo) e vedere dipendente per dipendente quante ore devono svolgere. Ovviamente non posso fare una semplice moltiplicazione perchè il risultato dipende dai giorni della settimana in cui l'anno inizia e finisce.
    Devo creare una tabella per ogni anno, dove inserire tutti i giorni, oppure c'è un modo in MySQL per automatizzare questo tipo di operazione, senza creare nuove tabelle?
    Ve lo chiedo perchè il database ha un'interfaccia web e quindi tramite un form è chi consulta la pagina a decidere il lasso di tempo in cui filtrare i dati.
    Però cosa faccio se mi chiedono i dati di un anno di cui non ho ancora creato la tabella?
    Potrei limitare gli anni creando un elenco a discesa con solo gli anni di cui ho le tabelle.
    Oppure creare una store procedure (se è così che si chiama) che verifica se la tabella di quell'anno c'è e se non c'è me la crea.

    Inoltre il totale finale lo posso anche calcolare via PHP sommando le ore dei singoli dipendenti man mano che scorro le righe per visualizzarle a schermo.

    Forse mi frullano troppe idee per la testa... :master:

    Grazie in anticipo a chi vorrà aiutarmi.

    /* Let's Lead the Web to Its Full Potential */

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non mi è chiaro questi 3 campi

    numero_giorno
    orario_entrata
    orario_uscita

    in che formato siano e cosa contengono. numero_giorno contiene valori da 1 a7?

  3. #3
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327
    Esatto, numero_giorno indica il numero del giorno della settimana a cui si riferisce la riga.
    Gli orari di entrata e uscita (campi time) in realtà sono molti di più, perchè l'applicazione gestisce anche la flessibilità, ma penso che questo non interessi il report che dovrei costruire, ma solo il totale delle ore previste per la giornata.

    Grazie
    /* Let's Lead the Web to Its Full Potential */

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ma se identifichi solo il giorno della settimana e orario di ingresso e uscita come fai a fare una query per anno,mese,ecc?

  5. #5
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327
    Facendo una join tra un'ipotetica tabella calendario e gli orari in base al numero di giorno della settimana?

    codice:
    SELECT O.id_dipendente, SUM(O.totale_ore) as tot_ore
    FROM orari as O 
       INNER JOIN calendario_2010 as C ON O.numero_giorno=DATE_FORMAT(C.datacalendario, '%w')
    GROUP by O.id_dipendente
    con da sistemare il fatto che DATE_FORMAT(C.datacalendario, '%w') restituisce zero per la domenica, invece di 7 come servirebbe a me....
    Insomma gli orari sono sempre quelli e si ripetono ciclicamente settimana per settimana durante tutto l'arco dell'anno.
    Mi chiedevo appunto se l'unico modo per avere delle date reali di un calendario da confrontare è inserendole in una tabella, magari temporanea, oppure se in MySQL c'è un altro modo.

    Grazie
    /* Let's Lead the Web to Its Full Potential */

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 © 2026 vBulletin Solutions, Inc. All rights reserved.