PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Rechercher la position d'une ligne dans une requète

Technique - général | Rechercher la position d'une ligne dans une requète

Par ducteil le 06/04/2006 - 11:59

Bonjour

Je précise que je ne suis pas très doué mais je crois avoir compris la notion de curseur.
J'ai une table de "reponse" à des jeux (id_participant int8, id_jeu int8,point int8,dtemodif timestamp) et je voudrais créer une requète donnant la position d'un joueur par rapport à son total de points.
En plus clair, elle donnerais le numéro de la ligne de "SELECT id_participant,sum(point) FROM reponse GROUP BY id-participant ORDER BY su(point)DESC" pour un id_participant donné.
Une solution serait de créer cette fonction :
CREATE TABLE top (
rang serial PRIMARY KEY,
id_participant int8,
point int8
);

CREATE OR REPLACE FUNCTION laposition(int8) RETURNS SETOf int8 AS $$
DECLARE
moncursor refcursor;
monrang int8;
mespoints int8;
BEGIN
TRUNCATE top;
ALTER SEQUENCE top_rang_seq RESTART WITH 1;
INSERT INTO top (id_participant,point) SELECT id_participant,sum(point) FROM reponse GROUP BY id_participant ORDER BY sum(point) DESC;
OPEN moncursor FOR SELECT rang,point FROM top WHERE id_participant = $1;
FETCH moncursor INTO monrang,mespoints;
RETURN NEXT monrang;
RETURN NEXT mespoints;
RETURN;
END;$$
LANGUAGE plpgsql;
---
Ma question : n'y aurait-il pas un méthode plus simple, moins lourde ?
NB : C'est pour alimenter un site web, il faut donc limiter les imports importants, et le nombre de joueurs pourrait atteindre les 5 000.

Merci d'avance

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour, Sans me pencher

SAS/ = 7 Avril, 2006 - 17:40

Bonjour,

Sans me pencher beaucoup plus sur la question, j'envisagerais plutôt une deuxième table contenant l'id de l'utilisateur et son total de point, mise à jour à l'iade d'un trigger. A chaque insertion d'une ligne, on additionne les points de la réponse au total de point acquis par l'utilisateur.

Cela aurait le mérite de ne pas avoir à effectuer de calcul pour classer les joueurs.

Stéphane Schildknecht


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.