Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [mysql] select con espressione per ricerca anno (nel where)

    giorno

    ho una tabella xtable con il campo "data di nascita" xdate in formato unix timestamp, integer (11)

    dovrei fare un piccolo motore di ricerca dove, inserendo l'età in un form, vengano mostrati gli utenti di xtable che hanno quell'età

    dunque una cosa come "select x,y,z from xtable where ..."

    ma cosa mettere nel where?

    grazie mille

    ps, ho provato a cercare nella documentazione di mysql, ma è immensa, mi son perso subito e non ho trovato niente

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    se tu usassi un campo date per le date sarebbe tutto molto più semplice

  3. #3
    eh, lo so, ma il problema è che ho tutto il database con date in timestamp e convertire tutto sarebbe un suicidio

  4. #4
    codice:
    $anni = 18;
    $anno_corrente = date("Y", time());
    $anno_di_nascita = $anno_corrente - $anni;
    $start = mktime(0,0,0,1,1,$anno_di_nascita);
    $end = mktime(23,59,59,12,31,$anno_di_nascita);
    $query = "SELECT x,y,z FROM xtable WHERE data_nascita > $start AND data_nascita < $end";
    l'ho scritto così al volo, non è testato...


  5. #5
    $query .= "datanascita > ".mktime(0,0,0,1,1,date("Y",time())-$age)." AND datanascita < ".mktime(23,59,59,12,31,date("Y",time())-$age);

    perfetto!! sembra funzionare

    grazie mille

  6. #6
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    oppure:
    codice:
    SELECT * FROM tabella
    WHERE FROM_UNIXTIME(datanascita,'%Y') = YEAR(CURDATE()) - $age

    think simple think ringo

  7. #7
    [supersaibal]Originariamente inviato da osvi
    eh, lo so, ma il problema è che ho tutto il database con date in timestamp e convertire tutto sarebbe un suicidio [/supersaibal]
    :master:

    aggiungi un campo DATETIME lo chiami pippo.

    ALTER TABLE tabella ADD `pippo` DATETIME NOT NULL;

    UPDATE tabella SET pippo = FROM_UNIXTIME(datanascita, '%Y-%m-%d %H:%i:%s');

    ALTER tabella DROP datanascita;
    ALTER TABLE tabella CHANGE pippo datanascita DATETIME

    nessun suicidio..... anche se ore minuti secondi servono "solo per l'oroscopo"

    Gia' in altri post e' stato inoltre rimarcato che i formati timestamp considerano il mondo iniziato il giorno 1-1-1970... e non mi piace sentirmi escluso dal mondo....

    Poi per me, attacca pure il bue dove preferisce il carretto

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

  8. #8
    grazie mille marketto anche a te

    >Gia' in altri post e' stato inoltre rimarcato che i formati timestamp considerano il mondo iniziato il giorno 1-1-1970... e non mi piace sentirmi escluso dal mondo....

    Esempio 1. Esempio di mktime()
    (sui sistemi dove time_t è un intero segnato a 32bit, come sulla maggior parte dei PC di oggi, l'intervallo valido per year è tra 1902 e 2037).
    http://it2.php.net/manual/it/function.mktime.php
    non dovrebbe prenderli lo stesso?

  9. #9
    non conviene tenere le date in formato unixtime per questa tipologia di cose

    per altre cose possono rivelarsi più comode, ma per queste cose non sono adatte...ad es possono essere molto utili per un sistema di logging o per gestire delle sessioni, dato che ti sganci completamente dal database, però per le date di nascita, o comunque date che, potenzialmente, possono superare i margini non conviene assolutamente
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    VVoVe: VVoVe:

    ok, cambio tipo di campo :°°°

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.