Newsgroup: it.comp.www.php
Titolo: Php e MySql: confronto di date

Ciao a tutti!
Spero che qualcuno di voi possa (e voglia :) aiutarmi,
il problema dovrebbe essere di semplice soluzione, ma io
oggi sono fuso e non ci arrivo!
Dunque, sto facendo un programmino in php che interroga
un db mysql, e nella pagina che sto tentando di fare oggi,
devo prendere dal db tutte le pratiche del mese corrente
per calcolare una statistica. Il punto e' questo: come
faccio a prendere solo le pratiche dell'ultimo mese?
Come programmatore sono molto in erba, per non dire in fasce,
e la soluzione che mi e' venuta in mente e' un po' macchinosa:
prendo la data odierna, faccio un substr per ricavare il mese
e lo metto a confronto col mese della data di ogni perizia;
C'e' un metodo piu' scaltro o sono io che pretendo troppo?
Ah, sulla macchina che ospitera' il programma gira php 3, e io
non posso farci niente :(
Grazie per l'attenzione e un saluto a tutto il ng!
ciao,
Orzouei

Dai un'occhiata alle funzioni per la gestione delle date fornite da MySql,
come MONTH():
Ad esempio, se la tua tabella si chiama "pratiche" e la relativa data sta
nel campo "data":
SELECT * FROM pratiche WHERE MONTH(data) = MONTH(NOW);
Ci sono anche degli esempi nel cap. 9 del manuale di MySQL.
Fammi sapere se funge alla bisogna.
M

fermat wrote:

Ti ringrazio per la risposta rapida :)
Mmmh, a dire il vero non mi funziona; forse dipende dalla versione di
mysql? sto usando la 3.23.36
cioe', se da riga di comando in mysql compongo cosi' la query:
SELECT * FROM pratiche WHERE MONTH(data) = 9, allora funziona,
ma se al posto di 9 metto MONTH(2001-9-01) oppure anche
MONTH(2001-09-01) mi da come risultato empty set.
per ora ho risolto in questo modo:
compongo ad hoc una stringa "data" con il giorno del mese impostato a 01
$today=getdate();
$mon=$today["mon"];
$year=$today["year"];
$data="$year-$mon-01";
e poi compongo cosi' la query:
$q1="select * from voti where dataperiz >= '".$data."'";
e in effetti i risultati trovati "matchano" le aspettative.
Or ora dalla regia mi dicono che esiste una funzione "Inbetween"
o roba del genere, ma sul mio manuale (l'unico che ho a disposizione
ora), "MySql" di Paul DuBois, Ed. New Riders 1999 non la trovo.

faccio a prendere solo le pratiche dell'ultimo mese?
Credo che esista la funzione MONTH:
... WHERE MONTH(data) = 9;
in PostgreSQL, esiste date_part:
...WHERE date_part('month',data) = 9;
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

|SELECT * FROM pratiche WHERE MONTH(data) = 9, allora funziona,
|ma se al posto di 9 metto MONTH(2001-9-01) oppure anche
|MONTH(2001-09-01) mi da come risultato empty set.
Scusa, ho dimenticato un paio di parentesi. Prova con MONTH(NOW()), oppure
con MONTH(CURRENT_DATE)
Altrimenti credo tu debba usare degli apici: MONTH('2001-09-01').

 ...WHERE date_part('month',data) = 9;
Oh, chi si vede! Ti diletti anche di php?
Sono un vecchio lurker di i.c.s.w., che ho ripreso a leggere
in questi giorni, forse piu' per i tuoi post divertenti (e
istruttivi) che per effettivo bisogno :)
Ma torniamo IT: da me sta funzione MONTH non funge, come scrivevo
prima a fermat, o meglio, mi funziona fino a quando comparo
month(data) al numero del mese, ma non appena cerco di
parametrizzarlo niente, ottengo solo un bel empty set.
Comunque ho risolto in un modo un po' artigianale, che ho esposto nel
reply a fermat.
Grazie e alla prossima :)

 con MONTH(CURRENT_DATE)
Funzionano entrambe! grazie.
Ora ho il problema di stampare le righe dell'array dei risultati tutte
intere con un solo comando, senza dover estrapolare i campi uno per uno
(mi sembra di ricordare che ci sia il modo) ma per questo provo ad
arrangiarmi da solo :)
Ciao,
Orzouei

|Ora ho il problema di stampare le righe dell'array dei risultati tutte
|intere con un solo comando, senza dover estrapolare i campi uno per uno
|(mi sembra di ricordare che ci sia il modo) ma per questo provo ad
|arrangiarmi da solo :)
Cioč? Non ti va il buon vecchio while($ciccio = mysql_fetch_row( .... ))
eccetera?
O ti riferisci a funzioni come array_values() e implode() ?