[Access SQL] Requêtes complexes avec l’assistant QBE (Exercice 2)

La règle du jeu est la même que pour l’exercice 1.

Seules les requêtes avec le label Q.B.E.O(*) sont admises ici…

(*) Q.B.E.O : Query By Example Only (0% SQL) -<8-) mouarf

Proposition de corrigé en page 3

Comme chacun sait, la base de données du forum Dvp est gérée sous Access ;-).

Afin également de réviser le fonctionnement du forum, on va s’intéresser ici au calcul des points de chacun des membres.
Voir : [Nouveauté] Nouveau système de rangs basé sur des points

Nous avons donc des membres,

qui ouvrent des discussions, chaque discussion comportant des messages rédigés par des membres.

Grâce au récent système de votes, chaque message peut comporter des votes positifs et négatifs :

Le champ [Vote] prendra les valeurs +1 ou -1, l’application prendra soin de vérifier qu’un membre ne puisse voter pour ses propres messages. Un membre ne peut voter pour un même message qu’une seule fois.

Les discussions qui ont le tag [Résolu] sont dans la table [TagRésolu] avec le membre qui a posé le tag:

La discussion est généralement taguée [Résolu] par son auteur (celui qui a posté le 1er message de la discussion) mais elle peut l’être par un autre membre ayant les droits requis (modérateur,…) qui récupèrera alors le point.

Voir le message ici:

… Désormais le forum « mémorise » qui utilise le bouton [Résolu] et donc, désormais, si c’est un modérateur qui utilise le bouton sur votre discussion à votre place, c’est le modérateur qui sera crédité d’1 point et non plus vous !

La requête au final doit retourner le total de points de chaque membre du forum (sans arrondi):

Le mode de calcul sera le suivant (allégé par rapport au système réel sur Dvp, pas de note sur les discussions, pas de point pour les articles ou les billets blogs…):
[Nouveauté] Nouveau système de rangs basé sur des points

0 point par discussion créée
0 point par réponse dans votre propre discussion
1 point par réponse dans une discussion qui n’est pas la vôtre
1 point par discussion marquée résolue
1 point par vote positif reçu sur un de vos messages
-1 point par vote négatif reçu sur un de vos messages
0,1 point par vote message envoyé

On considèrera que le créateur de la discussion est le membre qui a rédigé le 1er message (celui avec le champ [NumeroOrdre]=1).

A vous de jouer… Lien vers Exercice2.mdb

Note : l’usage de la fonction Nz est autorisé ;-)

Nz(Expression ; ValeurSiNull)

Ex : Nz([UnChamp] ; 0)
Si [UnChamp] est Null, la fonction Nz renvoie le nombre zéro

Proposition de corrigé

Voici les « vues » intermédiaires dont nous avons besoin.

1 point par discussion marquée résolue
0,1 point par vote message envoyé

1 point par vote positif reçu sur un de vos messages
-1 point par vote négatif reçu sur un de vos messages

0 point par discussion créée
0 point par réponse dans votre propre discussion
1 point par réponse dans une discussion qui n’est pas la vôtre

On commence par sélectionner le membre créateur de chaque discussion ouverte :

Pour chaque discussion, on élimine tous les messages rédigés par son créateur (idMembreOuverture Est Null). Puis on compte les messages restants regroupés par membre et qui rapportent des points à leurs auteurs.

Et enfin, on additionne tous ces points :

Laisser un commentaire