J'ai besoin d'une aide. J'ai besoin de graver l'enregistrement des 7 derniers jours, y compris aujourd'hui selon la date en utilisant PHP et MySQL. J'explique mon tableau ci-dessous.

db_special:

id             date                                        name

1       11/27/2017 11:14:48 AM                              Raj

2       10/26/2017 12:11:30 PM                              Rahul

Ici, je dois récupérer les données selon la valeur du champ date. Le format du champ Date est mm/dd/yyyy et mon exigence est de récupérer toutes les données de la table des 7 derniers jours, y compris today également en utilisant PHP et MySQL. Veuillez aider.

0
user5443928 27 nov. 2017 à 09:46

3 réponses

Meilleure réponse

Vous stockez votre MySQL sous forme de texte au format non ISO mm/dd/yyyy. Vous devrez donc effectuer une conversion à ce jour pour pouvoir accéder à l'une des fonctionnalités de date proposées par MySQL. La fonction STR_TO_DATE est utile ici. Considérez la requête suivante:

SELECT
    id, date, name
FROM yourTable
WHERE
    STR_TO_DATE(col, '%m/%d/%Y') > DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND
    STR_TO_DATE(col, '%m/%d/%Y') <= CURDATE();

La deuxième inégalité peut être omise si vous ne prévoyez pas d'avoir de futurs enregistrements.

Notez qu'à l'avenir, si vous prévoyez de faire des dates avec votre colonne date, vous devriez envisager de faire de cette colonne un type de date de bonne foi, plutôt que du texte.

Remarque: Il semble que vous ayez en fait un composant d'heure dans votre chaîne de date également. Comme cette démo le montre, si nous utilisons le masque de format %m/%d/%Y sur un tel horodatage, il supprimera le composant de temps entièrement, ne laissant que la date derrière.

2
Tim Biegeleisen 27 nov. 2017 à 09:20

Essaye celui-là :

select * from db_special
where date between date_sub(now(),INTERVAL 1 WEEK) and now();

Vous pouvez utiliser current_date comme format spécifié (n'importe quel)

SELECT * FROM db_special WHERE WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );
0
helpdoc 27 nov. 2017 à 09:26

La requête MySQL pour cela serait comme ceci, si votre colonne "date" est une chaîne:

select *
from db_special
where STR_TO_DATE(`date`, '%m/%d/%Y') >=date_sub(curdate(),INTERVAL 6 DAY) 
  and STR_TO_DATE(`date`, '%m/%d/%Y') < date_add(curdate(),INTERVAL 1 DAY)

Si elles sont stockées comme des dates appropriées, vous n'avez pas besoin de str_to_date ()

select *
from db_special
where date >=date_sub(curdate(),INTERVAL 6 DAY) 
  and date < date_add(curdate(),INTERVAL 1 DAY)

Notez que curdate () renvoie la date du jour à 00:00:00 (le début de la journée). Par conséquent, pour inclure toutes les données d'aujourd'hui, vous devez ajouter 1 jour à la date actuelle.

0
Used_By_Already 27 nov. 2017 à 07:06
47505303