Menu

COUNT() vs Increment +1, que choisir ?

moon33 - 9 juin 2018 à 19:12 - Dernière réponse :  moon33
- 10 juin 2018 à 11:01
Bonjour,

Je souhaite connaitre le nombre de commentaires, le nombre de likes, le nombre de dislikes , le nombre de favoris et le nombre de vues d'un article.

J'ai le choix entre deux méthode :

Méthode 1 Incrementation :

Je rajoute 5 colonnes dans ma table article et j'incremente d'un +1 chaque action d'un membre puis je récupère le tout a la fin avec un simple select.
inconvéniant : update a faire a chaque action d'un membre / (possible surchage si beaucoup d'action en même temps ?)
avantage : moins de requetes a l'affichage donc page qui se charge plus vite ?

Méthode 2 Count :

Je récupere le tout avec 5 count + la requete de base donc 6 requête au total au lieu d'une seule avec la première methode .
inconvéniant : plus de requête a l'affichage donc page plus lente ?
avantage: moins d'update , moins de travail

Précision qui a peut être son importance: Tout les articles seront mise en cache et seront update/delete a chaque action (commentaire,mise en favoris ect..) pour rafraichir les stats.

Voila je sais vraiment pas quelle méthode est la mieux sur le long terme, j'espère que vous allez m'aidez a faire un choix car c'est dur de trouver des infos sur le sujet ! :)

Bonne soirée!
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
jordane45 21366 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 juin 2018 Dernière intervention - 9 juin 2018 à 22:49
1
Merci
Bonjour

Methode 2 :
Une table d'historisation des clics
(Id , type_clic, date, id_page, id_user etc...)

Insertion a chaque clic

Une seule requete count avec group by sur le type.

Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24422 internautes ce mois-ci

Bonsoir jordane45

Ta méthode est juste magnifique! J'aurais jamais pensé a ça et c'est exactement ce que je recherchais ... simple, sans prise de tête et efficace!

En revanche pour les commentaires, je vois mal comment ne pas faire un count suplémentaire a moins qu'il soit mieux de faire une deuxième insertion dans la table des actions ... ça ferais un peu doublon mais au final je garde toujours un seul count. tu en penses quoi ?

merci , bonne soirée!
jordane45 21366 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 juin 2018 Dernière intervention - 10 juin 2018 à 00:12
Tu peux faire le count sur les commentaires dans la même requête via un sous select
Effectivement, ça marche impec merci beaucoup !
Commenter la réponse de jordane45
jee pee 21998 Messages postés mercredi 2 mai 2007Date d'inscriptionModérateurStatut 10 juin 2018 Dernière intervention - 9 juin 2018 à 20:07
0
Merci
Bonjour,

Une demande de précision suite à la lecture de ta question.

Le count() il s'effectue sur n enregistrements. Cela veut dire que l'alternative au +1 sur un compteur c'est créer un enregistrement de log pour chaque action ?

Cdlt
Commenter la réponse de jee pee
0
Merci
Bonsoir jee pee

Oui dans les deux méthodes chaque action entraine un enregistrement de base. Comme cela je peux vérifier qu'un membre vote pas plusieurs fois ou mette deux fois en favoris le même article ...

pour être le plus clair :

méthode 1
insertion de base + update a chaque action / select
méthode 2
insertion de base a chaque action / count + select
Commenter la réponse de moon33
0
Merci
re bonjour !

Si la table action est vide ou ne contient toujours pas de ligne avec la page en cours la sous requête pour compter les commentaires ne fonctionne pas ?

$count = $DB->query('SELECT COUNT(action_type) as typecount,action_type,(SELECT COUNT(*) FROM post_comment WHERE comment_post_id = '.$post_id.') as commentcount FROM post_action WHERE action_post_id = '.$post_id.' GROUP BY action_type ');


Bonne journée!
Commenter la réponse de moon33