Vous n'êtes pas identifié(e).
Pages :: 1
Salut,
J'ai besoin de classer des vidéos sur mon site en les organisant par "les plus populaires du mois" mais aussi de la semaine et du jour. Je me demande comment construire ma base de données pour pouvoir retrouver cette information.
J'ai pensé lister toutes les vidéos par date dans une seule table, mais lorsque je vais faire ma requête, je vais avoir beaucoup de lignes pour pas grand chose et je sais pas vraiment comment additionner les lignes pour les classer en populaires. Alors j'ai aussi pensé à incrémenter un compteur, mais dans ce cas là, c'est impossible d'attribuer une date à cette incrémentation...
Quelqu'un a-t-il une idée ou des suggestions pour m'aider à avancer dans ma réflexion ?
Merci !
Hors ligne
Saluton,
Qu'entends-tu par les vidéos les plus populaires ?
Sur quels événements se fonde cette popularité ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut,
Sur mon site, j'ai plusieurs vidéo, et à chaque fois que quelqu'un clique sur le lien de cette vidéo, il faudrait qu'elle gagne +1 en popularité. En fait, en discuttant avec un collègue qui est bien au courant du SQL, j'ai réussi à trouver la solution.
Donc à chaque fois qu'une vidéo est vue, j'ajoute une entrée dans la BD (date,titre,url)
Ensuite pour trouver lesquelles sont les plus populaires du mois, je fais la requête suivante :
Le résultat montre les 10 vidéos les plus populaires en ordre décroissant. Le truc était de faire la bonne requête. SQL c'est vraiment bien quand on maîtrise...
Dernière modification par macfred (25-06-2010 20:39:48)
Hors ligne
Table film
id int
titre char(50)
url varchar(100)
Table vue
id int
id_film int
nbvue int
date datetime
incrmenter le champ nbvue et mettre la date a jour a chaque vue
et la requete
SELECT titre,url,nbvue from film left join vue on film.id=vue.id_film
ecrit a l'arrache, donc a verifier la s1axe exact
a++
Hors ligne
Salut Pierrot,
La solution que j'ai postée au dessus de ton message contient 1 seule table de 3 colonnes et 1 seule requête d'insertion (pas besoin d'incrémenter). Est-ce qu'il y a une raison pour laquelle tu préconises cette solution plutôt que la mienne ?
Hors ligne
Saluton,
La solution de Pierrot évite le stockage redondant d'infos lourdes titre, url.
La colonne id de la table vue n'est pas indispensable, de mon point de vue.
Entre un UPDATE à chaque vue ou un INSERT, les performances doivent être très proches.
Par contre la requête de consultation sans comptage ni GROUP BY sera beaucoup plus rapide.
Seul bémol, on perd l'historique des consultations ce qui ne permet plus de fournir des statistiques de consultation sur une plage de dates.
Si c'était indispensable, il suffirait de modifier la table vue en supprimant la colonne nbvue, la requête de consultation, en jointure externe, devrait réintégrer un comptage et, partant, un GROUP BY.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pour m'être penché dernièrement sur les temps de traitement update et insert voilà ma contribution :
Un update (et ce quelque soit le nombre de termes, 1 ou 6 dans mes tests avec un textarea de plus de 200 mots) met environ autant de temps qu'un insert (insertion des 6 champs est très proche du update, l'insertion d'un seul champ mettant moins de temps).
Mais je cherche encore car cela ne me semble pas vraiment logique qu'une modification d'un seul champ mette autant de temps qu'un gros insert. Bon certes il y a la recherche à prendre en compte mais tout de même... On passe de 20ms pour un update et un insert à 6champs à tout juste 4ms pour un insert de un champ...
Hors ligne
Là encore, il ne faut pas négliger le temps requis pour la mise à jour des différents index.
Ceux-ci accélèrent les recherches et les jointures, mais pénalisent les ajouts, suppressions et modifications.
En matière d'optimisation de SGBD tout demeure affaire de compromis.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci pour votre aide.
Le gros problème de l'incrémentation est qu'il m'est impossible de connaître "les meilleurs du mois". La solution la plus logique serait de fonctionner avec 2 tables, une qui contient le ID, titre, l'url et l'autre qui contient IDtitre, date. Je ferais donc 1 insert qui ne contiendrait qu'un INT et une DATE.
Par contre, ma requête se fera toujours sur les champs insérés dans le mois en cours donc leur quantité restera limité lors de la requête. C'est vrai que j'ai de la redondance dans mes tables en utilisant cette méthode. Je me tate...
Je vais voir avec la première solution dont j'ai parlé, et je verrais d'ici quelques mois si j'ai besoin de passer avec une version plus légère ou non.
Hors ligne
Pages :: 1