Newsgroup: it.comp.www.php
Titolo: ricerca per data

Ciao a tutti,
sono nuovo del NG e, a dire il vero, anche di programmazione in PHP.
Ho la necessita' di estrarre dei dati tra un range di date:
es.: voglio estrarre i record che sono stati inseriti dal 18/04/02 al
23/04/02
A questo punto ho 2 problemi:
1) la data scritta nel dbase (campo tipo data) mi scrive la data 2002-04-18
e quindi dovrei girarmela ??
2) com'e' la sintassi esatta per eseguire la ricerca di un range di date?
In ASP era una cosa del tipo ... between #18/04/02# and #23/04/02#
ma qui in PHP?
Qualcuno mi da una mano?
Grazie
Gio(vanni)


SELECT campodata FROM tabella WEHRE campodata>='20020418' AND campodata
<='20020402'
questo presupponendo che usi MySql: il db gestisce le date nel formato anno
mese giorno; per la ricerca si può utilizzare il formato così come ho
scritto nella query
--
________________________________
                ~°~   Ale   ~°~
        ~~~ICQ #54291095~~~~
________________________________

Grazie ma come faccio a trasformare una data tipo 18/04/2002 in 20020418 ?
Qual'e' l'esatta funzione che mi permette di combinare la data come voglio?
Gio(vanni)

 Qual'e' l'esatta funzione che mi permette di combinare la data come voglio?
Penso che con dei substr() concatenati risolvi.
Se ad una function passi ad esempio $data, gli puoi far sputare fuori quello
che vuoi:
Es.
return substr($date, 0, 2) . substr($date, 3, 2) . substr($date, 6, 4);
Questa function se gli passi mm/gg/aaaa (all'inglese) ti rimanda fuori
mmggaaaa senza gli slash (/). Giocando cosi` dovresti risolvere. 
- -- 
Shyny - mitaka(at)
softhome.net
Microsoft just released a new product:
	Microsoft Windows for Windows(TM).
The ultimate Windows emulator for the Windows platform! Only $900!
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia-multi05
Charset: noconv
iQCVAwUBPMVSn8RC3d+b67pdAQHjCQP/W0Eo67jOxbEhGz1+Q6CzDIsUZdbS8jL+
/Y7fQTfJgSlgsW3ZnMC6aywAF7EuM4oxpZ+fSVfQ3rbP0QaxxiOipBGCoRcIRmAx
RNtsJUBZDSdtxZGU3/dRA9vkTMPu9EhlC7+BytNjdE5C7UVlcFCgjtqumhcWwoni
W1A3BbAxdNU=
=QaRS
-----END PGP SIGNATURE-----

...cmq ho provato come dici ma non mi estrae nulla!!
Gio(vanni)

Si' grazie, sono riuscito proprio come dici tu; ora pero' selezionando
questa query:
"select * from tabella where data >= $inizio and data <= $fine";
non mi estrae nulla ... :-(
dove sbaglio?
Gio(vanni)

 ...cmq ho provato come dici ma non mi estrae nulla!!
Guarda un po' qua se ti puo' essere utile
http://www.mysql.com/documentation/mysql/bychapter/manual_Tutorial.html#Sele
cting_rows
e
http://www.mysql.com/documentation/mysql/bychapter/manual_Tutorial.html#Date
_calculations
Max

 ha scritto nel messaggio
news:tXcx8.53298$vF6.1...@news2.tin.it...


>2) com'e' la sintassi esatta per eseguire la ricerca di un range di date?
Ciao,
proprio questi giorni, ieri mi sembra, ho postato un messaggio
simile al tuo, in cui come te, non riuscivo a fare una select mettendo come
clausula della where una data maggiore di xxx. Il campo data sulla mia
tabella č di tipo date, e cosě facendo mi escludeva totalmente quello che
mettevo nella where; la ignorava e mi tirava fuori comunque tutti i record.
Non ho ancora provato, ma qui sul ng mi hanno detto di cambiare il formato
del campo in datetime e di riprovare.
Se lo fai dimmi come č andata, cosě
poi lo faccio anche io.
Leggi anche il mio post, cosě ti vedi il thread,
sono 4 post contati :)
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it
 

Ciao a tutti, ci sono riuscito...
Innanzitutto una premessa: io ho un campo data di tipo date nel mio archivio
in Mysql che riposta, come sapete, la data nel formato anno-mese-giorno
(2002-04-23 sta per 23 aprile 2002); dal momento che al mio cliente faro'
inserire una data "italiana" nel campo data iniziale mettera' per esempio
18/04/2002 mentre nel campo data finale inserira' 23/04/2002
Bene a questo punto nella pagina di estrazione dei dati bisogna fare una
specie di funzione che trasformi da data italiana a data comprensibile al
server Mysql.
Ecco la funzione:
list($day, $month, $year) = explode("/", $datainizio);
$iniziale= "$year$month$day";
list($day, $month, $year) = explode("/", $datafine);
$finale = "$year$month$day";
quindi la query per un range di date diventera':
$result = mysql_query("SELECT * FROM telefonate WHERE data >= $iniziale AND
data <= $finale ORDER BY data, idtelefonata LIMIT $inizio, $num");
Per chi non lo sapesse ancora, $inizio e $num servono per la paginazione ...
ma questa e' un'altra storia.
Saluto e ringrazio tutti
Bye bye
Gio(vanni)


Mi ero scritto la seguente funzione, che migliorerň piano piano, per
convertire la data dell'utente in qualcosa di piů "digitale":
// by gpb
function GetInputDate($miadata,$formato)
{
  $arrayMese =  array("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic",
                       "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
  $dimArrayMese = sizeof($arrayMese);
  list ($giorno,$mese,$anno) = split("[\ /.-]", trim($miadata));
  setlocale(LC_TIME,"it_IT");
  $dataoggi =  time();
  // verifica anno
  if (isset($anno))
  {
    $anno = abs($anno) % 10000 ; // cosě ho da 0 a 9999
    if ($anno <= 9)
    {
      $anno += 2000;
    }
    elseif ($anno <= 99)
    {
      $anno += 1900;
    }
  }
  else
  {
    $anno = date ("Y",$dataoggi) * 1;
  }
  // verifica mese
  if (isset($mese))
  {
    if (($mese<1) || ($mese>12))
    {
      $mese = substr(strtolower($mese) . "   ",0,3);
      for ($i = 0 ; $i < $dimArrayMese ; $i++)
      {
        if ($mese == $arrayMese[$i])
        {
          $mese = $i % 12 + 1 ;  break;
        }
      }
      if ($i==$dimArrayMese)
      {
        return "" ;  // NON VALIDO
      }
    }
  }
  else
  {
    $mese = date ("m",$dataoggi) * 1;
  }
  // verifica giorno
  if (($giorno>=1) && ($giorno<=31))
  {
    if (  (($giorno == 31) && ($mese == 11 || $mese == 4 || $mese == 6 || $mese == 9))
      ||  (($mese == 2) && ($giorno>29))  )         // manca ancora gestione anni bisestili
    {
      return "" ;
    }
  }
  else
  {
    return "" ;
  }
  if (!checkdate($mese,$giorno,$anno))  return "";
  return date($formato,mktime(0,0,0,$mese,$giorno,$anno,0));
}
La funzione accetta input del tipo:
"23 aprile 2002" , "23.apr", "23/4", "23",
praticamente usa come separatori lo spazio, oppure il punto,
o il "-" o "/", l'ordine deve essere giorno-mese-anno,
se manca l'anno usa l'anno corrente, se manca anche il mese
usa il mese-anno corrente. Come mese puoi mettere un numero
o il nome o parte del nome sia in italiano che in inglese
(solo le prime tre lettere sono significative, per
cui "OTTembre" viene letto come "ottobre".
Come formato di output puoi mettere quello che vuoi,
compatibile con la funzione date().
Dal tuo programma chiamare qualcosa del genere:
 $myDal  = GetInputDate($HTTP_POST_VARS["Dal"],"Ymd") ;
ed in $myDal trovi la tua data formattata come vuole mySQL.
Ciao
	gpb
-- 
http://gpbizzaro.supereva.it/index.html