Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    16

    Problema formato date in mysql

    salve a tutti ho il seguente problema,
    nel mio database ho una colonna dove porta il formato data standard quando uno va ad inserire la data in mysql il famoso comando DATE()
    ecco il formato come esce: 2008-09-17 17:09:47

    siccome all'interno della stessa query voglio fare in modo che se la data differisci di un giorno allora può eseguire il codice tipo così:

    $sql = SELECT * FROM nometabella WHERE date...

    if($sql != 1) {
    esegui codice
    } else {
    esegui altro codice
    }

    da notare che nella tabella c'è già memorizzata la data e deve fare la differenza tra la data memorizzata e quella attuale. ma non so come fare la query...qualcuno mi può aiutare?

  2. #2
    Allora....

    DATE() non e' un comando ma un formato di campo che rende yyyy-mm-dd se ti rende 2008-09-17 17:09:47 allora e' un campo DATETIME o TIMESTAMP (ansi)

    la query la puoi fare in questo modo:

    codice:
    select if(NOW() - interval 1 day >= campo_data, 'si', 'no') as permesso
    from tabella
    where ....
    in pratica se sono passate 24 ore ricevi un 'si' altrimenti un 'no'

    perche' 24 ore e non un giorno... perche' ti porti dietro ore:min:sec mentre si presume che si calcola a giorni si intenda dalle ore 00:00:00 alle 23:59:59

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    16
    sto risolvendo riconvertendo le date ora ho la seguente situazione:
    $controllo_click_data = "2009-01-06"

    where ... AND CURDATE() > $controllo_click_data

    ma se faccio così non mi da una query corretta nel senzo che anche se la data corrente è uguale a quella memorizzata mi segna lo stesso i dati...dove sbaglio???


    P.s.
    i puntini (...) sono altre cose ma sono corrette.

  4. #4
    codice:
    where ... 
    AND CURDATE() - interval 1 day >= '$controllo_click_data'
    parlato... AND oggi - 1 giorno e' superiore o uguale alla data di controllo.

    ma non ha senso. devi controllare la data memorizzata sul db e non quella che passi con la variabile. In questo caso la data di oggi (curdate())

    codice:
    where ... 
    AND CURDATE() - interval 1 day >= campo_data
    ma se vuoi confrontare una tua data con quella su db dovresti fare:

    codice:
    where ... 
    AND campo_data + interval 1 day <= '$controllo_click_data'


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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    16
    Spe ti spiego bene cosa devo fare, in pratica ho una community dove alcuni utetni si cliccano tra loro per le calssifiche click etc. Siccome alcuni stanno abusando oltre che fare controlli ip etc volevo fare in modo che ogni giono da un utente possono ricevere massimo un click.

    da qui il mio database:
    CREATE TABLE IF NOT EXISTS `nuke_user_profilo_check` ( `id` bigint(11) NOT NULL auto_increment, `member_see` varchar(30) NOT NULL default '', `myname` varchar(30) NOT NULL default '', `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34282 ;
    mentre quello che sto facendo io è questo:

    require("mainfile.php");
    global $db, $prefix, $cookie;

    $result = $db->sql_query("SELECT date FROM `nuke_user_profilo_check`
    WHERE myname='fenomeno' AND member_see='AntonioKasanova' ORDER BY `date` DESC LIMIT 0,1");
    echo '<pre>';
    print_r($row = $db->sql_fetchrow($result));
    echo '</pre>';

    $ciao = $row['date'];
    $datetime = date_create($ciao);
    $controllo_click_data = date_format($datetime, 'Y-m-d');

    $result2 = $db->sql_query("SELECT * FROM nuke_user_profilo_check
    WHERE myname='fenomeno' AND member_see='AntonioKasanova' AND CURDATE() - interval 1 day >=$controllo_click_data ORDER BY id DESC LIMIT 0,1");
    echo '<pre>';
    print_r($db->sql_fetchrow($result2));
    echo '</pre>';

    fenomeno e AntonioKasanova sono appunto nickname di utenti... io voglio fare un controllo nel database. Se la data del click è di ieri allora può eseguire il codice per la classifica altrimenti ignora....
    la data nel database è del tipo 0000-00-00 00:00:00

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    16
    P.s.
    Ho provato come dici tu ma non va!!!

    Ti incollo pure il database:

    CREATE TABLE IF NOT EXISTS `nuke_user_profilo_check` (
    `id` bigint(11) NOT NULL auto_increment,
    `member_see` varchar(30) NOT NULL default '',
    `myname` varchar(30) NOT NULL default '',
    `date` datetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34324 ;

    --
    -- Dump dei dati per la tabella `nuke_user_profilo_check`
    --

    INSERT INTO `nuke_user_profilo_check` (`id`, `member_see`, `myname`, `date`) VALUES
    (1, 'AntonioKasanova', 'fenomeno', '2009-01-07 17:09:47'),
    (2, 'AntonioKasanova', 'fenomeno', '2008-01-08 17:34:34');

    da premettere che come vedi nella prima query estaggo la data in formato 0000-00-00 00:00:00 per convertirla in formato 0000-00-00. CURDATE() dovrebbe darmi una data del tipo 0000-00-00 e facendo il confronto tra CURDATE e $controllo_click_data dovrebbe darmi un risultato. Ma secondo me il problema sta nel fatto che quel confronto fra date dovrebbe dami un true o un false...piuttosto che dei risultati in modo da risolvere il mio problema...io non sono capace a fare ciò...quindi spero in un tuo/vostro aiuto.
    Grazie cmq piero.mac

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    16
    Ho risolto facendo così:

    sbagliavo la query cmq ora ho risolto:

    $result2 = $db->sql_query("SELECT if(CURDATE() > '".$controllo_click_data."', 'si', 'no') as permesso FROM nuke_user_profilo_check WHERE myname='".$cookie[1]."' AND member_see='AntonioKasanova'");

    solo che quella variabile $controllo_click_data è la data che c'è anche nel database con il nome 'date' che ha un formato tipo 000-00-00 00:00:00. Io avevo pensato di converitre quella data con il comando mysql DATE() mettendo invece di $controllo_click_data=>DATE('date') ma non funziona...qualche soluzione??

  8. #8
    DATE(date) senza apici altrimenti ti controlla la parola "date" come fosse una stringa ascii e quindi rende una data nulla 0000-00-00.

    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.