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?

inviato 7 anni fa
eros23
X 0 X

In una query puoi usare diverse funzioni da applicare ad un campo date, ad esempio per specificare particolari condizioni sulle date. Tutte le specifiche le trovi qui:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Nel tuo caso potresti aggiungere un giorno dalla data in questione e confrontarla con la data corrente

WHERE DATE_ADD(campo_date ,INTERVAL DAY 1) < CURDATE()

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

io ho fatto tipo così:

SELECT * FROM `nuke_user_profilo_check`

WHERE CURDATE() > DATE_FORMAT('date', '%Y-%m-%d') ORDER BY `date` DESC LIMIT 0,1

ma non funziona

risposto 7 anni fa
eros23
X 0 X

Certo che non funziona, DATE_FORMAT genera una stringa contenente la data in modo che questa sia leggibile agli occhi di un essere umano. Certamente non serve a fare un contronto con la data correte.

Per fare il confronto tra la data nel database e quella corrente non devi modificarne l'aspetto con DATE_FORMAT ma devi scrivere una condizione ben precisa, ad esempio "la data presente in questa colonna più un giorno deve essere minore della data corrente"

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

aspetta gianni ti spiego la mia situazione. In pratica ci sono utenti che si possono cliccare tra loro però faccio la classifica utente per click...siccome si cliccavano come i cani prima ho fatto un controllo tra utente poi un controllo tramite ip adesso gli metto che al massimo si cliccano una volta al giorno...

quindi per ora ho risolto a metà con codice PHP e mi ritrovo questa situazione dove ho alla fine una variabile con codice:

$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!! Teoricamente dovrebbe non segnarmi la query

forse ci vuole una specie di IF else dentro la query che non so fare

P.s.

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

risposto 7 anni fa
eros23
X 0 X

prova a mettere gli apici:

CURDATE() > '$controllo_click_data'

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

già fatto ma non va! ti faccio vedere il tutto.

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

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...forse non sono capace io a farlo

risposto 7 anni fa
eros23
X 0 X

ho fatto la seguente prova su phpmyadmin e va:

SELECT * FROM nuke_user_profilo_check

WHERE myname='fenomeno' AND member_see='AntonioKasanova' AND CURDATE() >'2009-01-08' ORDER BY id DESC LIMIT 0,1

ma se la faccio sulla query non va ci deve essere qualcosa che non va roba della variabile che ho sostituito con la 2009-01-08...

risposto 7 anni fa
eros23
X 0 X

Se quella query funziona su phpMyAdmin significa che lo script PHP compone male l'SQL. Prova a modificare lo script in questo modo:

$sql = "SELECT date FROM `nuke_user_profilo_check` .....

echo $sql;

$result = $db->sql_query($sql);

in questo modo saprai che query stai mandando a MySQL e potrai confrontarla con quella che hai scritto in phpMyAdmin.

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda