SELECT mysql su parametro data

iw8ffg

Nuovo Utente
3 Apr 2016
10
0
1
Ciao a tutti,
mi servirebbe un aiuto perchè sto diventando matto; ho un database mysql con il quale vengono registrati i turni nel formato AAAA-MM-GG effettuati da ogni singolo volontario della mia associazione e ho bisogno di creare una query con il quale mi mostra a video quei volontari che NON hanno effettuato turni negli ultimi 2 mesi.
Qualcuno mi riesce ad aiutare??????

Grazie 1000 in anticipo
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
non hai pubblicato le tabelle, per cui accontentati degli esempi,
la query,
al posto delle date in chiaro puoi mettere le variabili php $myDatePast e $myDateToday
"ma_aggior" è la colonna nel mio db che ho usato per il test
devi comunque aggiustarla per estrarre ciò che ti serve
Codice:
select distinct ma_aggior from matrice
where ma_aggior NOT between '1990-08-13 00:00:00' and '2014-02-10 23:59:59'
order by ma_aggior
come calcolare le date usando la data di oggi come riferimento,
PHP:
$myDate = new DateTime();
$myDateToday = $myDate->format('Y-m-d 23:59:59');
$myDatePast  = $myDate->modify('-2 months +1 days');
$myDatePast  = $myDatePast->format('Y-m-d 00:00:00');
echo $myDatePast." - ".$myDateToday."<br /> <br />";
il risultato,
2016-02-05 00:00:00 - 2016-04-04 23:59:59
se, nel tuo database, la data è priva dell'ora, elimina dal "format" i valori
 

iw8ffg

Nuovo Utente
3 Apr 2016
10
0
1
Ciao e grazie per la risposta;
ho provato a lanciare la query e mi restituisce come risulta solo delle date senza farmi vedere i nomi di chi corrisponde.
il DB e formato da queste table:
1 tabella "Anagrafica" dove sono presenti i campi "ID" e "Nome & Cognome"
1 tabella "Turni" dove sono presenti i campi "ID" "Nome & Cognome" e "Data"
Ho configurato già una query che mi riporta tutti i turni fatti dal singolo volontario ma quello che mi interessa e che a video mi compaiano solo i volontari che l'ultimo turno fatto risale ad una data antecedente ai 2 mesi.
Di seguito ti descrivo la struttura del DB
Codice:
mysql> describe Anagrafica
    -> ;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| ID             | int(11)     | NO   | PRI | NULL    | auto_increment |
| Cognome & Nome | varchar(60) | NO   |     | NULL    |                |
| Attivo         | varchar(2)  | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+

mysql> describe Turni;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| ID             | int(11)     | NO   | PRI | NULL    | auto_increment |
| Cognome & Nome | varchar(60) | NO   |     | NULL    |                |
| Data           | date        | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
in questo modo ti ritorna anche l'ultimo servizio,
PHP:
select ID, 'Cognome & Nome', max(Data) from turni
where Data < '2016-02-05'
group by 'Cognome & Nome'
order by 'Cognome & Nome'
 

iw8ffg

Nuovo Utente
3 Apr 2016
10
0
1
Ciao grazie mille in anticipo per l'aiuto ho provato a lanciare questa query e mi restituisce questo risultato
Codice:
ID	Cognome & Nome	MAX( Data )
4	Cognome & Nome	2016-02-10
In poche parole non mostra il valore del Cognome & Nome..... :(
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
scusa ma, usare i nomi dei campi in quella forma vuole dire farsi male da soli,
sarebbe stato meglio un "CognomeNome"
in ogni caso usa gli apici "storti" (non li uso mai e non so come si chiamano)
`Cognome & Nome`