2014-12-29 16 views
8

Ho tabella user, contiene id_user, username e user_time. E user_time è la volta che un utente registrato, le proprietà è timestamp quindi l'uscita è come questo:Mostra dati nel giorno, settimana, mese e anno corrente

User A | user_time > 2014-12-22 10:10:10 

Poi io uso questa query per visualizzare i dati all'anno

SELECT * FROM user WHERE user_time = YEAR(NOW()); 

Le opere di query, ma restituisce solo una riga vuota. Non è solo l'anno, ma anche il giorno, la settimana e il mese restituiscono le righe vuote. Perché questa query non restituisce alcun dato?

risposta

10

Il problema è che non fa nulla con i tuoi dati:

SELECT * FROM user WHERE user_time=YEAR(NOW()) 

cercare di ottenere il YEAR dal user_time troppo, come questo, in modo da confrontare i numeri, non timestamp e un numero:

SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

Oppure, come suggerito @ItsMe:

EXPLAIN SELECT * FROM user WHERE YEAR(user_time) = YEAR(NOW()) 

E per favore, evita il * nelle tue query, questa è una cattiva pratica.

+0

Grazie uomo .. funziona –

+0

@Andhika È possibile accettare la risposta, se hai trovato utile :) – VMAtm

+2

ANNO (user_time) = YEAR (NOW()) non è raccomandato; poiché richiederà la scansione completa della tabella. Prova 'EXPLAIN SELECT * FROM user WHERE YEAR (user_time) = YEAR (NOW())' – ItsMe

6

YEAR restituisce un numero come 2014. Non sarà mai uguale a un tempo. È necessario verificare se l'anno del user_time è lo stesso del dato anno:

SELECT * FROM user 
WHERE YEAR(user_time) = YEAR(NOW()) 
Problemi correlati