MYSQL sélectionnez l'endroit où la date à l'intérieur de cette journée
MA requête ressemble à ceci:
SELECT COUNT(entryID)
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Sera-ce de compter les lignes dont le date
valeurs sont dans la journée (à partir de 12:00; pas dans les 24 heures)? Si non, comment dois-je faire?
Je pense que ma solution est
Il sera de retour tous les records hier, à compter du début de la journée, et pas seulement ceux dans les 24 heures lorsqu'il a été exécuté.
Si vous voulez seulement les 24 heures précédentes, l'utilisation
WHERE DAYNAME(date) == CURDATE()
. Le problème est que DAYNAME
retourne la forme du mot 'vendredi'. J'ai besoin du numéro de formulaire de sorte qu'il peut comparer avec CURDATE()
.Il sera de retour tous les records hier, à compter du début de la journée, et pas seulement ceux dans les 24 heures lorsqu'il a été exécuté.
SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY)
retourne 2012-03-29
, donc >= '2012-03-29
est de tous les enregistrements d'hier et d'aujourd'hui.Si vous voulez seulement les 24 heures précédentes, l'utilisation
NOW()
au lieu de CURDATE()
OriginalL'auteur Hope4You | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
Le suivant devrait être suffisant pour obtenir des enregistrements dans le courant de la journée:
Que Michael notes dans les commentaires, il regarde tous les enregistrements dans les deux derniers jours, dans sa forme actuelle.
La
>=
opérateur n'est nécessaire que sidate
est en fait undatetime
- si c'est juste unedate
type,=
devrait suffire.DATE(date)
afin d'obtenir la date de la partie, tout de même).Cool! Juste à l'aide de
=
devrait être assez, et en fait plus correcte dans le cas jamais il y avait des dates futures.Je viens de me rappeler maintenant que l'utilisation de
DATE(date)
arrêtera indices sur la lignedate
de travail. Serait-il travailler pour moi à utiliserWHERE date >= CURDATE()
même lorsquedate
estDATETIME
? Sera-ce encore seulement obtenir des lignes à partir du début de la journée?Il doit encore travailler pour vous. J'ai en fait écrit la réponse de la pensée
date
pourrait êtredatetime
.OriginalL'auteur Paul Bellora
Voici la solution:
SELECT COUNT(entryID)
FROM table
WHERE DATE(date) >= CURDATE()
Depuis mon
date
de la colonne est de typeDATETIME
, j'utiliseDATE(date)
pour obtenir juste la date, et non le temps de la partie.OriginalL'auteur Hope4You
CURDATE() retourne une date comme '2012-03-30", pas un timestamp comme '2012-03-30 21:38:17'. La soustraction d'un jour renvoie également à seulement un jour, pas une heure. Si vous voulez penser à une date que l'horodatage il pense que le début de la journée, ce qui signifie un temps de 00:00:00'.
Et c'est la raison, pourquoi ce
et ce
faire de même.
J'ai une autre astuce:
SELECT COUNT(entryID)
etSELECT COUNT(*)
donnent le même résultat.SELECT COUNT(*)
donne de la base de données de machine de plus de posibilités pour optimiser le comptage, de sorteCOUNT(*)
est souvent (pas toujours) plus rapide queCOUNT(field)
.Ne serait pas
SELECT COUNT(*)
être plus lent depuis*
signifie que toutes les lignes?En fait avec INNODB un
COUNT(primary_id)
est plus rapide.COUNT(*)
peut être très lente dans une grande table INNODB.OriginalL'auteur Hubert Schölnast