mysql - Vous cherchez une solution pour compter le nombre de nouveaux contrats
巴扎黑
巴扎黑 2017-05-02 09:26:05
0
5
783

Scène

Les utilisateurs connectés peuvent vérifier à tout moment le nombre de nouveaux contrats sur une certaine période

Relations avec les membres du département

华东区总经理 
 |--- 华东1区经理 
 |      |---销售主管11 
 |      |    |---销售员111
 |      |    |---销售员112
 |      |---销售主管12
 |           |---销售员121
 |           |---销售员122
 |
 |
 |--- 华东2区经理 
        |---销售主管21 
        |    |---销售员211
        |    |---销售员212
        |---销售主管22
        |    |---销售员221
        |    |---销售员222
        |---销售主管23
        |    |---销售员231
        |    |---销售员232
华北区总经理 
 |--- 华北1区经理 
 |      |---销售主管31 
 |      |    |---销售员311
 |      |    |---销售员312
 |      |---销售主管32
 |           |---销售员321
 |           |---销售员322
 |
 |
 |--- 华北2区经理 
        |---销售主管41 
        |    |---销售员411
        |    |---销售员412
        |---销售主管42
        |    |---销售员421
        |    |---销售员422
        |---销售主管43
        |    |---销售员431
        |    |---销售员432
     

Formulaire de contrat

id          合同id
name        合同名称
created_at  创建时间
created_by  创建人
updated_at  修改时间
updated_by  修改人

Règles de calcul

【新增合同数】 = 【所有下级的新增合同数】+【本人新增合同数】

Option 1

La base de données est MySQL, car le nombre de contrats supérieurs est la somme du nombre de contrats de tous les subordonnés, nous obtenons donc récursivement les identifiants utilisateur de tous les subordonnés de l'utilisateur
puis utilisons count(*) de table où (conditions de la période créée_à) et créé_par dans (tous les ID utilisateur subordonnés, y compris l'ID utilisateur actuellement connecté)

Problème : Les données sont exactes, mais inefficaces et ont un impact sur les performances du serveur

Option 2

Utilisez un tableau séparé pour enregistrer chaque jour le nombre de nouveaux contrats pour chaque utilisateur, ou obtenez d'abord les identifiants de tous les utilisateurs subordonnés, puis utilisez
select sum (inum) from user_count Where (created_at time period condition)
et create_by in (tous les ID d'utilisateur subordonné, y compris l'ID d'utilisateur actuellement connecté)

Problème : ce champ doit être modifié à chaque fois que vous ajoutez, supprimez ou supprimez par lots. Si le nombre d'utilisateurs augmente, la possibilité de compter les erreurs est très élevée. Bien que les statistiques soient pratiques, les données sont inexactes.

Aide

Notre site Web comptera les nouveaux ajouts d'aujourd'hui, les ajouts d'hier, les ajouts de cette semaine, les ajouts de ce mois, les ajouts de ce trimestre et les ajouts de cette année. Les utilisateurs peuvent également saisir leur propre période pour interroger
Avez-vous des suggestions. ? Une solution qui peut rendre les données à la fois précises et statistiquement efficaces ?

巴扎黑
巴扎黑

répondre à tous(5)
Ty80

Pensez à mettre une copie du contrat nouvellement ajouté dans Redis et à l'effacer une fois par jour.

PHPzhong

L'option 1 est l'option privilégiée. Le seul problème est qu'elle est lente à obtenir de manière récursive tout le personnel subordonné. Alors résolvons ce problème !

Supposons que la structure approximative de la table du personnel soit la suivante, un stockage de données arborescent typique.
ID, Nom, ParentId

Ajoutez-y un champ Chemin, dont la valeur est le chemin d'accès à la personne, tel que -12-45-765-, où 765 est l'ID utilisateur actuel, 45 est le supérieur de 765 et 12 est le supérieur de 45.

Avec ce champ, il est facile de filtrer tous les subordonnés d'un leader et lui-même en fonction de son identifiant. select id from employee where path like '%-45-%'

N'oubliez pas de mettre à jour ce champ lors de la mise à jour future des affiliations du personnel.

阿神

Si vous disposez d'une grande quantité de données, vous devez les interroger et les calculer à chaque fois que vous les consultez. C'est très, très stressant, quelle que soit la solution que vous utilisez.
Pour ce genre de chose, autant faire du streaming directement des statistiques de calcul. Calculez une donnée une fois et interrogez-la directement lorsque vous l'utilisez.
Afin de ne pas affecter les performances des processus normaux, les statistiques informatiques en streaming peuvent être exploitées de manière asynchrone
Notre système a réalisé des statistiques similaires. Vous pouvez voir les 90 derniers jours en consultant les statistiques quotidiennes et les 3 dernières années. en regardant les statistiques mensuelles, auparavant, vous ne pouviez les visualiser que par année, ce qui semble être similaire à vos besoins
J'ai écrit un petit code pour le calcul des statistiques de flux, ce qui prenait moins d'une semaine.
github.com/panjjo/flysnow Bien sûr, l'écriture du code est assez mauvaise.

小葫芦

Il s'agit d'une exigence OLAP courante dans le domaine des bases de données, et des vues matérialisées peuvent être prises en compte.

Pour référence.

J'adore MongoDB ! Amusez-vous!

大家讲道理

Écrire un timer résoudra le problème, c'est tout ! ! !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal