J'ai une plateforme qui a une fonction d'enregistrement. Je dois déterminer combien de jours consécutifs cet utilisateur s'est enregistré sur cette plateforme et lui attribuer différents points.
Par exemple, nous sommes aujourd'hui le 26 avril et je me suis connecté tous les jours depuis le 15 avril. Cela signifie que je me suis connecté pendant 12 jours consécutifs. Je me suis également connecté le 13 avril, mais je ne me suis pas connecté le 14 avril.
Déclaration mysql Comment l'écrire
Généralement, le nombre de jours de connexion continue est stocké. S'il n'est pas stocké, une méthode que nous avons déjà utilisée consiste à stocker la connexion avec un horodatage, puis à obtenir l'horodatage de la connexion. nous l'obtenons pour un mois (si ce mois-ci, lorsque la connexion est complète, obtenons le numéro du mois précédent), puis parcourons le nombre de jours en PHP pour le calculer. Plus tard, cette méthode était plus lente, nous avons donc enregistré les jours d'enregistrement séparément
Problèmes de conception de la base de données.
Comme il est nécessaire de compter les jours consécutifs, il est impossible d'enregistrer un élément chaque jour (imaginez une banque enregistrant le solde de l'utilisateur pour un nombre quelconque de jours).
La méthode comptable est appelée algorithme d'accumulation annuelle. C'est-à-dire qu'il enregistre un certain moment jusqu'à un autre moment. Le solde à un moment donné reste inchangé (continu)
conception de la table, à peu près comme suit :
Heure de fin - heure de début = nombre de jours. La conversion des points est comme la taxe, calculez simplement le bonus
.Dans vos règles commerciales, il devrait y avoir une limite sur le nombre de points qui seront attribués pendant x jours consécutifs. Par exemple, combien de points seront attribués s'il y a >= 20 jours consécutifs.
Alors rappelons-nous ce x, dans db sélectionnez * from tb où uid = 10086 ordre par dt desc limit x
Puis dans le programme, déterminez le nombre maximum de jours consécutifs et additionnez le score correspondant.