Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: [mysql] datetime

  1. #1

    [mysql] datetime

    ho un "motore di ricerca" dove trovo degli utenti, ed ho un campo "anni" con 18-21 21-25 ecc

    passo tutto alla pagina del motore, però non so come fare la query..
    il campo "datanascita" è del tipo DATETIME

    Codice PHP:
      if ($age2 != "") { //ovvio se non viene passata la data non accodiamo nulla
        
    $age2x explode("t",$age2); // si esplodono i dati postati
        
    $ageXXa date("Y",time())-$age2x[0]; //anno di ora - (es) 18
        
    $ageXXb date("Y",time())-$age2x[1]; //anno di ora - (es) 21
        
    $query .= " AND UNIX_TIMESTAMP(u.datanascita) > ".mktime(0,0,0,1,1,$ageXXa)." AND UNIX_TIMESTAMP(u.datanascita) < ".mktime(23,59,59,12,31,$ageXXb);
      } 
    la query è corretta, ma non trovo mai nulla

    idee?

  2. #2
    Se trova nulla la chiami corretta???

    Hai un campo_nascita con datetime, un campo anni con un range ???

    dal form? spiegati meglio.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    allora, si, scusa se ho scritto di fretta

    ho una query SELECT qualcosa FROM utenti WHERE tipoutente='X'

    ad essa accodo le varie cose (solo se vengono specificate) come l'età, la regione, le lingue parlate [...]
    ovvio che se non si specifica niente mi viene la lista degli utetni completa

    nel database, x quando riguardo la data di nascita, ho solo un campo chiamato datanascita del tipo DATETIME

    il range di anni da cercare viene specificato dal form

  4. #4
    Allora devi realizzare prima di tutto un range di anni da presentare nel between di WHERE senza tutta quella roba la.

    Se il form ti presenta per esempio 18-25 farai un list + explode.

    LIST($min , $max ) = explode("-", $_POST['range']);

    select quel che vuoi da dove ti pare
    WHERE year(datanascita) between '$min' AND '$max'
    AND DAYOFYEAR(NOW()) >= DAYOFYEAR(datanascita)

    Tenendo presente che l'anno sara' dal 1 gennaio al 31 dicembre. cioe' se ti serve anno compiuto bisognera valutare' anche mesi e giorni. Questa e' la ragione della AND.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    perfetto è quello che volevo!
    provo

  6. #6
    uhm nessun risultato

    ho notato due cose

    $min e $max non sono degli anni veri di nascita, ma l'età, quindi ho messo date(Y) - $min (e max) ma non va lo stesso

    facciamo conto che questi limiti siano 1980 e 1990, viene
    ...WHERE year(datanascita) between '1980' AND '1990'
    AND DAYOFYEAR(NOW()) >= DAYOFYEAR(datanascita)

    se un utente è nato nel 1984, ma il giorno dell'anno attuale non è maggiore o uguale a quello della nascita, non soddisfa la query

  7. #7
    Hai ragione.

    Il problema va risolto diversamente.

    Hai un campo datetime che deve essere tra oggi meno 18 anni e oggi meno 25. E fin qui ci siamo.
    codice:
     
    WHERE datanascita between now() - interval $max YEAR AND  now() - interval $min YEAR
    Diversamente sara' stabilire il giorno.

    Mi stai prendendo un po' di fretta..... devo uscire. Quando torno riprendo l'argomento.

    ci sentiamo piu' tardi se non hai risolto.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Ciao...

    Guardando con calma la soluzione e' proprio quella postata qui su.

    la ripeto:
    codice:
    SELECT * 
    FROM tabella
    WHERE datanascita 
    BETWEEN NOW() - INTERVAL 25 YEAR   --// <- 1980
    AND NOW() - INTERVAL 15 YEAR       --// <- 1990
    order by datanascita
    oviamente devi rispettare l'ordine dei valori, prima il minore poi il maggiore altrimenti between non funge. Il giorno e mese lo prende da se. Non serve altro.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    niente continua a non trovare niente

  10. #10
    [supersaibal]Originariamente inviato da osvi
    niente continua a non trovare niente [/supersaibal]
    Come' la struttura della tabella e quali sono i dati reali che utilizzi?

    show create table tabella

    Stampa della query.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.