Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    MySql e PHP, ricerca periodo di tempo

    Ciao a tutti.

    Ho il seguente problema:
    ho un db con i vari campi utente, password, data registrazione etc . Le date sono in formato date o datetime.

    Devo fare un form e specificare un periodo di tempo, ad esempio:
    campo1: 2008/09/20
    campo2: 2008/09/09

    Il mio problema e' questo: una volta inserite le date in capo1 e campo2, devo cercare all'interno del db quali utenti si son registrati all'interno del periodo da me specificato.
    Non saprei come fare.
    Sia che si tratti di date DATe che di DATETIME.

    Qualcuno potebbe illuminarmi anche solo con semplici esempi?

    ciao

  2. #2
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304
    Codice PHP:
    $query="SELECT * FROM nometabella 
    WHERE campodata>campo1 AND campodata<campo2"

    dove con nometabella mi riferisco al nome della tua tabella e con campodata il nome effettivo del campo in cui è memorizzato il dato.

    Ricordati che è sempre meglio memorizzare la data su un DB in formato timestamp con la funzione mktime, di conseguenza per poter confrontare tale data anche le date messe nel campo1 e campo2 prima di essere messe nella query dovranno essere convertite in timestamp!

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Mmmm se ho il campo del db in formato DATE, cosa consigli di fare?

    scompattare in 3 stringhe la data, e fare:
    $giorno=substring con il giorno;
    $mese= substring con il mese;
    $anno=substring con l'anno;

    $data2= mktime (0,0,0,"$giorno", "$mese", "$anno");

    Fare la stessa cosa con l'altra data per il confonto e poi:

    $query="SELECT * FROM nometabella
    WHERE campodata>campo1 AND campodata<campo2";

    ?

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    mysql gestisce regolarmente i campi data con > o < , l' importante è che sintatticamente abbiano lo stesso formato... poi puoi usare tutti gli operatori di confronto matematico classici come <,>, <=, >= ecc...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Come converto 3 stringhe in una data in formato DATe e DATETIME?
    Se ad esempio ho $giorno, $mese, $anno come procedo?

  6. #6
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304
    Originariamente inviato da Skaffa
    Come converto 3 stringhe in una data in formato DATe e DATETIME?
    Se ad esempio ho $giorno, $mese, $anno come procedo?
    Cosi':
    Codice PHP:
    $data2mktime (0,0,0,$giorno$mese$anno); 

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Grazie mille ora provo

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Nel db ho le date in formato date, registrare quindi come aaaa-mm-gg

    Da input io importo 2 date (3 stringhe ciascuna) e compongo la data con mktime come scritto su.

    Ora il problema e': come faccio , con mysql, se ho una query che mi chiede di cercare nel db tutti gli eventi che stanno tra le due date che io ho dato in input?

    Perche' la query diretta non posso farla penso, in quanto le date che do in input , con mktime, le trasformo in formato timestamp ( o sbaglio?) mentre nel db la data e' in formato aaa-mm-gg.

    Mmm sto andando in confusion, help

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Cerco di essere piu' preciso:
    in una form compilo i campi di due date e le invio tramite post a un pagina php.
    In questa pagina lavoro le stringhe passate in questo modo:

    Codice PHP:
    $nomeuser=$_SESSION ['user'];
    $annoi=clin ($_GET['nome']);
    $mesei=clin($_GET['nome2']);
    $giornoi=clin ($_GET['nome3']);
    $annof=clin ($_GET['nome4']);
    $mesefclin ($_GET['nome5']);
    $giornof clin ($_GET ['nome6']);
    $conf clin ($_GET['nome7']);
    $workclin ($_GET['nome8']); 
    e riunisco poi le date nel seguente modo:

    Codice PHP:
    if (checkdate($mesei,$giornoi$annoi) && checkdate($mesef,$giornof$annof) )
    {
    $data1=mktime (0,0,0,$giornoi$mesei$annoi,0);
    $data2=mktime(0,0,0,$giornof$mesef$annof,0); 
    Ovvero controllo prima che siano date valide e poi le trasformo in timestamp.

    Ora mettiamo $data1 sia : 2009/7/17
    e $data2 sia: 2009/7/24

    Io voglio fare una query nel mio db, che mi restituisca eventi(se ce ne sono) che accadono tra $data! e $data2.

    nel DB ogni eventi e' descritto da 2 date, datainizio e datafine.
    Ora, una possibile query sarebbe quindi:

    Codice PHP:
    $result =doquery ("SELECT nome FROM conferences WHERE data_inizio >$data1 AND data_fine < $data2");


    if (
    mysql_fetch_array($result) == null  )
        echo (
    '<h4>Spiacente, 0 risultati.<h4>');
    else 
    nell'else in caso di risultati, creo la tabella e stampo i risultati.

    Ora la domanda e': di per se la query e' esatta sintatticamente?
    non mi da errori, ma non mi da neanche i risultati pero'.

    Nel db , le date son in formato date, ovvero:



    Ora come posso fare quindi?
    Perche' se la query del confronto diretto non funziona, come faccio a selezionare gli eventi da me voluti?


    p.s. cosi su due piedi farei nel seguente modo:
    (nel file php in questione)

    1) query mysql dove seleziono il campo data di tutti gli eventi presenti nel db
    2)while ($row..)
    per ogni campo datainizio estraggo la data e la metto in una variabile togliendo i "-".
    3) stesso lavoro per i campo datafine
    4)trasformo tutte le date con mktime
    5)faccio il confronto in php delle date
    6) se il confronto e' positivo , uso $row per stamparmi a video gli eventi

    Ecco, mi pare troppo macchinoso..esiste un metodo per evitare di scrivere chili di codice per una cosa che mi sembra si possa risolvere facilmente?

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