Je réalise un projet où je suis un suivi des utilisateurs sur un site Web, je connecte chaque hit sur le site. Chaque fois qu'ils frappent une URL, je vais le créer dans la base de données, et le marquer avec quelques balises.Tri et calcul par date dans la requête jointe
Chaque URL est appelée «ressource» dans ma base de données et une ressource peut être associée à plusieurs tags. Un visiteur est connecté aux ressources lorsqu'il visite une URL, et lorsqu'un utilisateur rencontre une ressource, je lui connecte également la date.
La chose que je veux faire est de trouver les ressources avec les balises correctes, qui ont été observées ce mois-ci ou aujourd'hui pour un exemple.
La requête Je suis en train de construire est ici:
SELECT r.resource_id, r.resource_url
FROM resource r
JOIN visitor_resource vt ON vt.resource_id = r.resource_id
JOIN resource_tags rt ON rt.resource_id = vt.resource_id
JOIN tags t ON t.tag_id = rt.tag_id AND t.tag_name = '42'
GROUP BY r.resource_id
Pour vous donner une idée de la structure que vous pouvez voir ici: tracking database structure http://kaspergrubbe.dk/db-overview.png
Donc, fondamentalement, je vais devoir compter combien de visitor_resources il est dans un mois donné en regardant visitor_resources.last_visited pour le mois dernier, et obtenez les 5 ressources les plus visitées.
Comment aborder cela? La requête ci-dessus semble également très lente sans la mise en cache des requêtes, je suppose que c'est parce que t.tag_name n'est pas un index, et c'est un varchar, mais est-ce qu'il y a une accélération du processus autre que l'ajout de cet index?
Merci.
Si vous ne stockez que la date last_visited, cela ne vous indiquera pas réellement combien de fois une ressource a été visitée. Un visiteur pourrait aller à une ressource plus d'une fois dans le même mois, je suppose. Peut-être que c'est correct et que vous vous souciez seulement des visiteurs uniques, mais je pensais que je devrais le signaler. –
Merci d'avoir souligné cela, mais c'est par conception :) –