- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Query in mysql
-
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.
-
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.
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.
-
Devo quindi creare due tabelle una dipendenti
tre campi
IdDipendente
Cognome
Nomee l'altra ore
con i seguenti campi
IdDipendente
Data
Cantiere
Oree devo relazionare
gli IdDipendente
Tutto giusto.
Comunque grazie per la risposta proverò subito in questo modo.
Grazie
-
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
OreCosì se domani dovrai far delle modifiche a qualche record ti basterà puntare all'id del record.
-
Grazie ci provo e vedo cosa succede
-
Ok fatto ma il risultato è la somma delle ore di tutti i dipendenti anche quelli non inseriti nella scheda ore
come risolvo
-
Risolto errore nella difitazione della query.
-
E se volessi restringere anche il campo cantiere?
-
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]