Quelle Est La Meilleure Façon De Sélectionner Les Lignes À Partir Des 7 Derniers Jours?
Quelle est la meilleure façon de ne sélectionner que les lignes de la table qui ont été créés au cours des 7 derniers jours?
Il existe des dizaines de fois et les fonctions de date dans MySQL et je suis un peu confus au sujet de ce qui est la meilleure façon de le faire.
Pour le bien de cette question, supposons que vous disposez d'une table appelée "ma_table" et il contient une ligne "created_at" qui est un DATETIME.
SELECT * FROM my_table WHERE ...
Que feriez-vous de remplir la clause where?
Eh bien, il ya plusieurs façons de le faire. Mais si vous êtes en utilisant un langage pour construire votre requête, qui va changer certaines choses.
Pas vraiment, vous devriez être en utilisant la base de données pour ce faire, pas l'application de la couche.
Tellement de façons de faire la même chose. DONC, la communauté rox!
Ouais, tout comme MySQL, bien que, comme dit Richard, wow qu'une panoplie de date/heure. 🙂
Hansen: je suis en fait à l'aide de Zend Framework et de ses composantes (Zend_Db_Table, Zend_Db) pour créer des requêtes sql mais cela ne veut pas changer les choses. Vous pouvez très bien faire une, où l'objet et de concaténer une chaîne de caractères comme 'ET champ = 5'.
Pas vraiment, vous devriez être en utilisant la base de données pour ce faire, pas l'application de la couche.
Tellement de façons de faire la même chose. DONC, la communauté rox!
Ouais, tout comme MySQL, bien que, comme dit Richard, wow qu'une panoplie de date/heure. 🙂
Hansen: je suis en fait à l'aide de Zend Framework et de ses composantes (Zend_Db_Table, Zend_Db) pour créer des requêtes sql mais cela ne veut pas changer les choses. Vous pouvez très bien faire une, où l'objet et de concaténer une chaîne de caractères comme 'ET champ = 5'.
OriginalL'auteur Richard Knop | 2009-09-29
Vous devez vous connecter pour publier un commentaire.
Je l'aime parce qu'il lit: "d'Où la Différence de Date entre Maintenant et quand il a été créé est au plus 7 (jours)." dans ma tête
j'ai peut-être mal ici .. mais l'habitude que la requête de convertir tous les created_at des dossiers et de la correspondance par la suite ? nest pas une surcharge ensuite de faire le match dans l'autre sens?
Je soupçonne que vous êtes à la droite, surtout si
created_at
a un indice (et il le fait, de droit Richard?). Cela rend la vie plus difficile pour l'optimiseur, mais aurait besoin de test pour voir si elle la dépasse.Je n'ai pas regardé jusqu'à la fonction, mais être prudent avec tout simplement en disant: "âgés de plus de 7 jours à partir de maintenant", parce que si c'est 1 dans l'après-midi, plusieurs de ces types de fonctions renvoient des résultats de la dernière
7 * 24 hours
laissant ainsi toute les enregistrements de cette première journée AVANT de 1 PM. C'est pourquoi ma réponse utiliseDATE()
autour d'un timestamp référencescreated_at n'a pas d'index en fait parce qu'il ne s'en sert pas beaucoup, je l'utilise dans une clause where sur une seule page.
OriginalL'auteur Drew
C'est mon préféré, parce qu'il est tellement...clair. Mais
ADDDATE
est très bien aussi (et vous pouvez utiliser leINTERVAL
forme avec des que pour plus de clarté; sa valeur par défaut est jours si vous voyez des gens en le laissant éteint). Vous ne pas voulez faire un calcul surcreated_at
et de le comparer ànow()
parce que nécessite le calcul surcreated_at
sur chaque ligne (en supposant que MySQL ne fait pas l'optimiser), tandis que la modification denow()
et en la comparant à un non modifiécreated_at
signifie que MySQL n'a que peu une fois et utilise le résultat lorsque l'on compare contre les lignes, pour ne pas mentionner les indices.Date_Add
. J'ai ... ajouté ... c'. 😉OriginalL'auteur T.J. Crowder
...... OÙ created_at >= DATE_SUB(CURRENT_DATE, INTERVALLE de 7 JOURS)
j'espère que ça va aider
OriginalL'auteur Sabeen Malik
OriginalL'auteur Byron Whitlock
OriginalL'auteur Anthony
SELECT * from ma_table OÙ ma_table.datefield > sysdate - 7
OriginalL'auteur erikric