COUNT() vs Increment +1, que choisir ?

Fermé
moon33 - Modifié le 9 juin 2018 à 19:14
 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!
A voir également:

4 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
9 juin 2018 à 22:49
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.

1
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!
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
10 juin 2018 à 00:12
Tu peux faire le count sur les commentaires dans la même requête via un sous select
0
Effectivement, ça marche impec merci beaucoup !
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
9 juin 2018 à 20:07
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
0
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
0
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!
0