Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Aide requête SQL ...

7 réponses
Avatar
Christophe Cordonnier
N'étant pas un véritable pro des requêtes SQL je me permet de faire appel aux
experts pour m'aider pour faire une petite requête :)

Situation : Mettre à jour les compteurs d'un forum
2 tables :
+ Posts : Avec champ MemberID
+ Membres : Avec champ MemberID également

Chose à réaliser :
Compter les posts ayant le même MemberID afin de mettre à jour le nombre de
posts réalisés par un membre (MemberID) ... le tout pour mettre à jour
automatiquement le nombre de messages posté par chaque membre.

Voilà j'espère qu'un sympathique membre de ce newsgroup aura pitié de moi :)

--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/

7 réponses

Avatar
jeorme
salut
je pense que :


SELECT memberID, count(*) as nb_post
FROM post

déjà ça te donnera le nombre de poste de chaque membre.

Par contre pour le faire automatiquement il faut savoir si tu veux faire un
trigger ou une PS qui tourne toutes les X minutes

"Christophe Cordonnier"

a écrit dans le message de
news:
N'étant pas un véritable pro des requêtes SQL je me permet de faire appel


aux
experts pour m'aider pour faire une petite requête :)

Situation : Mettre à jour les compteurs d'un forum
2 tables :
+ Posts : Avec champ MemberID
+ Membres : Avec champ MemberID également

Chose à réaliser :
Compter les posts ayant le même MemberID afin de mettre à jour le nombre


de
posts réalisés par un membre (MemberID) ... le tout pour mettre à jour
automatiquement le nombre de messages posté par chaque membre.

Voilà j'espère qu'un sympathique membre de ce newsgroup aura pitié de moi


:)

--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/


Avatar
jgabillaud
Si la modification de la tables des membres à lieu lors de chaque insertion
ds la table des posts, alors il est possible d'automatiser à l'iade d'un
déclencheur du style:

create trigger majMembres on Posts
AFTER INSERT
as
begin
declare @numeroMembre as int
select @numeroMembre=membreId FROM Inserted
update membres set nombre=nombre+1 where membres.membreId=@numeroMembre
end

"jeorme" a écrit :

salut
je pense que :


SELECT memberID, count(*) as nb_post
FROM post

déjà ça te donnera le nombre de poste de chaque membre.

Par contre pour le faire automatiquement il faut savoir si tu veux faire un
trigger ou une PS qui tourne toutes les X minutes

"Christophe Cordonnier"

a écrit dans le message de
news:
> N'étant pas un véritable pro des requêtes SQL je me permet de faire appel
aux
> experts pour m'aider pour faire une petite requête :)
>
> Situation : Mettre à jour les compteurs d'un forum
> 2 tables :
> + Posts : Avec champ MemberID
> + Membres : Avec champ MemberID également
>
> Chose à réaliser :
> Compter les posts ayant le même MemberID afin de mettre à jour le nombre
de
> posts réalisés par un membre (MemberID) ... le tout pour mettre à jour
> automatiquement le nombre de messages posté par chaque membre.
>
> Voilà j'espère qu'un sympathique membre de ce newsgroup aura pitié de moi
:)
>
> --
> Christophe - MVP Windows Mobile
> http://www.windows-mobile.info/





Avatar
Christophe Cordonnier
Merci pour vos réponses mais ce que je recherche est juste une belle requête
pour recaler les billes de mon forum ... disons une fois par mois :)

Globalement le nombre de messages est mis à jour parfaitement mais dans
certains cas ces chiffres ne sont pas mis à jour.

Je recherche donc une requête simple qui puisse me permettre de mettre à
jour toutes les semaines les bons chiffres :)

En 2 requêtes j'arrive à le faire pour chaque membre mais j'aimerais juste
pouvoir effectuer la chose en une seule requête ... chose que je pense
possible :)

Pour avoir le nombre de posts :
SELECT MemberID, count(*) as nb_post FROM posts

Pour mettre à jour le membre :
UPDATE Membres set NBPosts=X where MemberID=Y

X & Y étant récupérables dans la première requête je suis certain qu'il est
possible de mettre à jour toute la table Membre par une simple requête ...
trop compliquée pour moi :)
Avatar
lamhamji
Bonjour,

Je ne suis pas certain qu'une telle requête soit possible puisqu'il faut
mettre à jour toutes les lignes d'un champ, donc il y a un problème dans la
clause WHERE...
C'est peut-être faisable en cherchant bien, mais sinon en crééant une
procédure stockée ça marche très bien :

CREATE PROCEDURE CountPosts AS
DECLARE c CURSOR FOR SELECT memberid FROM membres;
DECLARE @mid INT;
BEGIN
OPEN c;
FETCH NEXT FROM c INTO @mid;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE membres SET nbposts=(SELECT COUNT(*) FROM posts WHERE
memberid=@mid) WHERE memberid=@mid;
FETCH NEXT FROM c INTO @mid;
END
CLOSE c;
DEALLOCATE c;
END

Ensuite pour l'exécuter il suffit de taper la requête EXEC countposts;
C'est même plus simple que d'essayer de se souvenir de la requête chaque
mois ;-)

Cordialement

"Christophe Cordonnier"
wrote in message news:
Merci pour vos réponses mais ce que je recherche est juste une belle
requête
pour recaler les billes de mon forum ... disons une fois par mois :)

Globalement le nombre de messages est mis à jour parfaitement mais dans
certains cas ces chiffres ne sont pas mis à jour.

Je recherche donc une requête simple qui puisse me permettre de mettre à
jour toutes les semaines les bons chiffres :)

En 2 requêtes j'arrive à le faire pour chaque membre mais j'aimerais juste
pouvoir effectuer la chose en une seule requête ... chose que je pense
possible :)

Pour avoir le nombre de posts :
SELECT MemberID, count(*) as nb_post FROM posts

Pour mettre à jour le membre :
UPDATE Membres set NBPosts=X where MemberID=Y

X & Y étant récupérables dans la première requête je suis certain qu'il
est
possible de mettre à jour toute la table Membre par une simple requête ...
trop compliquée pour moi :)


Avatar
Christophe Cordonnier
Un très grand merci :)
Je sais que ce serait assez simple en syntaxe mais pour une personne plus
compétente que moi :)

Reste pour moi à tester sur ma base de Test :)


"brouardf" a écrit :
Une seule requête sans procédure ni curseur suffit largement :
UPDATE membres
FROM membres M
SET nbposts=(SELECT COUNT(*)
FROM posts P
WHERE P.memberid=M.memberid)
A +


Avatar
Christophe Cordonnier
Pour terminé merci beaucoup car ça fonctionne parfaitement. Une requête que
je lance donc tous les jours pour mettre à jour la base concernée ... pour
pallier aux bugs de ce forum :)

Pour infos la syntaxe exacte :
UPDATE membres
SET nbposts=(SELECT COUNT(*)
FROM posts P
WHERE P.memberid=M.memberid)
FROM membres M


"brouardf" a écrit :
Une seule requête sans procédure ni curseur suffit largement :
UPDATE membres
FROM membres M
SET nbposts=(SELECT COUNT(*)
FROM posts P
WHERE P.memberid=M.memberid)


Avatar
brouardf
Une seule requête sans procédure ni curseur suffit largement :

UPDATE membres
FROM membres M
SET nbposts=(SELECT COUNT(*)
FROM posts P
WHERE P.memberid=M.memberid)

A +



lamhamji a écrit :
Bonjour,

Je ne suis pas certain qu'une telle requête soit possible puisqu'il faut
mettre à jour toutes les lignes d'un champ, donc il y a un problème dans la
clause WHERE...
C'est peut-être faisable en cherchant bien, mais sinon en crééant une
procédure stockée ça marche très bien :

CREATE PROCEDURE CountPosts AS
DECLARE c CURSOR FOR SELECT memberid FROM membres;
DECLARE @mid INT;
BEGIN
OPEN c;
FETCH NEXT FROM c INTO @mid;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE membres SET nbposts=(SELECT COUNT(*) FROM posts WHERE
memberid=@mid) WHERE memberid=@mid;
FETCH NEXT FROM c INTO @mid;
END
CLOSE c;
DEALLOCATE c;
END

Ensuite pour l'exécuter il suffit de taper la requête EXEC countposts;
C'est même plus simple que d'essayer de se souvenir de la requête chaque
mois ;-)

Cordialement

"Christophe Cordonnier"
wrote in message news:

Merci pour vos réponses mais ce que je recherche est juste une belle
requête
pour recaler les billes de mon forum ... disons une fois par mois :)

Globalement le nombre de messages est mis à jour parfaitement mais dans
certains cas ces chiffres ne sont pas mis à jour.

Je recherche donc une requête simple qui puisse me permettre de mettre à
jour toutes les semaines les bons chiffres :)

En 2 requêtes j'arrive à le faire pour chaque membre mais j'aimerais juste
pouvoir effectuer la chose en une seule requête ... chose que je pense
possible :)

Pour avoir le nombre de posts :
SELECT MemberID, count(*) as nb_post FROM posts

Pour mettre à jour le membre :
UPDATE Membres set NBPosts=X where MemberID=Y

X & Y étant récupérables dans la première requête je suis certain qu'il
est
possible de mettre à jour toute la table Membre par une simple requête ...
trop compliquée pour moi :)