-1
votes

Récupérer les données de ma base de données MySQL pour le mois en cours

Je souhaite récupérer les données de ma base de données MySQL pour le mois en cours.

Dans la base de données, j'ai une colonne next_due qui stocke la date du mois suivant.

Maintenant, si cette colonne est le 13-Nov-2020 et aujourd'hui le 13 novembre 2020, le code devrait afficher les données de la personne dont la date d'échéance est le 13 novembre 2020.

Voici ma requête:

SELECT * FROM new_regis WHERE MONTH(next_due) = MONTH(CURRENT_DATE())
AND YEAR(next_due) = YEAR(CURRENT_DATE())

Mais ça ne fonctionne pas.


2 commentaires

l'utilisation d'une colonne d'horodatage réel avec un horodatage correctement formaté rendrait probablement cela plus simple.


Vos dates sont-elles réellement dans ce format?


3 Réponses :


-1
votes

Pour obtenir les données du mois en cours, vous pouvez utiliser

SELECT * FROM users WHERE MONTH(2020-05-15 17:36:38) = 5

Voici 5 est le mois en cours que vous pouvez obtenir de PHP


4 commentaires

Pourquoi voter moins! Moins le vote décourage juste d'aider


Je soupçonne que quelqu'un a voté contre parce que la requête ne fonctionnera pas (les citations sont manquantes) et que la personne qui pose la question a un format de date différent pour lequel cela ne fonctionnera pas non plus. Comparez votre réponse à celle acceptée qui montre clairement comment travailler avec ce format.


J'étais juste lui donner une idée, et sur le premier il a écrit: je veux aller chercher les données du mois en cours. Citation que je n'ai pas utilisée et est clairement visible, un développeur peut facilement le comprendre.


@SKS, vous pouvez choisir de laisser votre réponse ici ou de la supprimer. Dans tous les cas, cette page redondante est susceptible d'être entièrement supprimée.



2
votes

Vous devriez vraiment stocker les dates dans des colonnes de type DATE . Cela vous simplifierait la vie.

Heureusement, MySQL a des fonctions intégrées pour vous aider à travailler avec des dates qui sont stockées sous forme de texte. MONTH(next_due) ne fonctionnera pas, car MySQL ne sait pas comment analyser next_due tant que valeur de date. Vous devrez d'abord lui dire comment: MONTH( STR_TO_DATE(next_due, '%d-%b-%Y') ) .

La fonction STR_TO_DATE analysera une chaîne en une date, étant donné un spécificateur de format STR_TO_DATE comment analyser la chaîne. Ce spécificateur de format %d-%b-%Y doit correspondre à votre format si vos jours sont à deux chiffres. Si vous stockez les dates au 5-Nov-2020 (avec un seul chiffre pour le jour), utilisez %e au lieu de %d . La liste complète des options pour votre format est répertoriée avec la fonction DATE_FORMAT dans la documentation.

La requête suivante devrait donc fonctionner pour vos besoins:

SELECT * FROM new_regis WHERE MONTH(STR_TO_DATE(next_due, '%d-%b-%Y')) = MONTH(CURRENT_DATE())
AND YEAR(STR_TO_DATE(next_due, '%d-%b-%Y')) = YEAR(CURRENT_DATE())


1 commentaires

La question ne nécessitait que des conseils avec STR_TO_DATE() . Il y a plusieurs pages où ce conseil existe sur Stack Overflow. Veuillez nous aider à clore les questions redondantes. Merci.



0
votes

Je pense qu'il est préférable de ne traiter l'horodatage que complètement.

  • Stockez le fichier next_due comme horodatage.
  • $ aujourd'hui = heure ().
  • Récupérez dans la base de données et comparez.

$sql = "SELECT here";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row

  while($row = $result->fetch_assoc()) 
{
$next_due=$row['next_due'];
$today=time()
$data=array();
if ($next_due==$today)
{
//True show data here
$data['id']=$row['id'];
$data['name']=$row['name'];

print_r"$data";

}

else
{
//False
print"Sorry not current day.";
}

  }
}
 else {
  echo "0 results";
}




0 commentaires