Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    query sql per controllo eta! qualche suggerimento?

    Ciao a tutti,
    il mio problema è questo...ho una tabella mysql nella quale ho memorizzato una serie di utenti per i quali salvo la data di nascita in formato UNIX(mktime())...

    dovrei effettuare una ricerca per trovare quegli utenti compresi tra un età e un altra che faccio inserire agli utenti in due input text...

    non mi viene nessuna idea su come "fare questa query" avendo poche conoscenze del linguaggio sql...come posso fare il controllo? posso farlo direttamente nella query o devo fare dei controlli in php...????


    Grazie a ki mi risponderà....


  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Potresti usare

    SELECT DATEDIFF(NOW(), data_nascita) AS eta FROM tabella HAVING eta>(365*18) ORDER BY eta

    Questo dovrebbe selezionarti tutti i maggiorenni ad es.

    Per maggiori info
    http://dev.mysql.com/doc/refman/5.1/...functions.html

  3. #3
    ciao, e innanzitutto grazie per la risposta...
    ho provato a fare come dici tu ma mi dava un insieme vuoto come risultato(provando la query su phpmyadmin) stranamente, perchè mi avrebbe dovuto restituire due record....
    per vedere il perchè ho tolto la condizione HAVING e m'ha restituito la colonna età con tre campi "NULL"...

    ho provato a sostituire la funzione now() con UNIX_TIMESTAMP() perchè la mia data sul db è memorizzata in questo formato "443142000" che dovrebbe essere lo l'unix timestamp del 17/01/1984...ma niente... ancora come risultato "NULL"

    c'è da dire che la data di nascita in formato unix timestamp la prendo con la funzione "mktime(0, 0, 0, $mm, $dd, $yyyy);" e nel db la memorizzo in un campo VARCHAR...

    possono influire queste ultime cose nel mio problema??? :master:

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Hai ragione, mi era sfuggito il particolare del formato della data. Usa FROM_UNIXTIME per convertirla (UNIX_TIMESTAMP è la funzione inversa, cioè ti da il timestamp a partire da una data)

    codice:
    SELECT DATEDIFF(NOW(), FROM_UNIXTIME(data_nascita)) AS eta FROM tabella HAVING eta>(365*18) ORDER BY eta

  5. #5
    si adesso va!... ...però adesso ho un ulteriore domanda...come faccio a "estrarre" oltre l'età anche gli altri campi??

  6. #6
    RETTIFICA...sono riuscito a selezionare anche gli altri campi...
    però il mio problema è questo:

    cosa indica il dato età che viene fuori dalla queri? io credevo fossero il numero di giorni dalla data di nascita...xò facendo l'età % 365 per trovare l'età in anni il dato che mi risulta non è corretto... :master:

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Restituisce il numero di giorni.

    facendo l'età % 365 per trovare l'età in anni il dato che mi risulta non è corretto...
    Certo! Perchè devi fare età / 365, non modulo!

  8. #8
    facevo il modulo per avere il risultato "intero"...e credevo andasse... :master: ...
    cmq adesso ho fatto come dici tu e poi ho fatto (int)risultato per togliere le cifre dopo la virgola...

    adesso va tutto perfettamente!
    Grazie mille x l'aiuto!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    No, l'operatore % ti dà il modulo, cioè il RESTO della divisione.

    Nota che puoi anche fare la divisione direttamente nella query

    codice:
    SELECT (DATEDIFF(NOW(), FROM_UNIXTIME(data_nascita))/365) AS eta FROM tabella HAVING eta>18 ORDER BY eta

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