Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Sat 13 August 2022 01:20

Maverick83000
Participant occasionnel
Lieu: Toulon
Date d'inscription: 23 Jul 2014
Messages: 10

PostgreSQL - Fonction Trigger d'insert en boucle depuis autres tables

Bonjour à tous,

J’ai essayé de trouver des réponses sur les forums et faire des tests sans succès donc je m’en remets à vous. Pour le contexte, on organise des concours de pronostiques avec des amis et cette année, je saute le pas de la base de données et du BI pour retranscrire les résultats.
J’ai une version 11 de Postgresql et je cherche à créer une fonction Trigger qui me permettra d’insérer, à chaque ajout de match dans la table top14,  autant de lignes qu’il y a de pronostiqueurs dans la table pronostics_matchs tout en intégrant les informations de ces 2 tables.

J’ai une première table de pronostiqueurs :

Code:

CREATE TABLE pronostiqueurs (
    id_pronostiqueur varchar(20) NULL,
    prenom varchar(50) NULL,
    nom varchar(50) NULL
);

INSERT INTO pronostiqueurs
VALUES 
('U1', 'Hendrix', 'Jimmy'),
('U2', 'Lennon', 'John'),
('U3', 'Dickinson', 'Bruce');

Une seconde table de compétition Top14 (et ouais le monde de l'ovalie) :

Code:

CREATE TABLE top14 (
    id_match varchar(50),
    competition varchar(30),
    journee varchar(10),
    num_match varchar(10),
    equipe_dom varchar(30),
    score_dom float8,
    bonus_off_dom boolean,
    equipe_ext varchar(30),
    score_ext float8,
    bonus_off_ext boolean,
    date_match timestamp
);

Une dernière table qui regroupe chacun des matchs dupliqués pour autant de pronostiqueurs :

Code:

CREATE TABLE pronostics_matchs (
    id_prono varchar(50),
    id_match varchar(50),
    competition varchar(30),
    journee varchar(10),
    num_match varchar(10),
    id_pronostiqueur varchar(30),
    equipe_dom varchar(30),
    score_dom float8,
    bonus_dom boolean,
    equipe_ext varchar(30),
    score_ext float8,
    bonus_ext boolean
);

Voilà la fonction trigger qui semble marcher à moitié car elle ne me renvoie qu’une seule ligne entièrement remplie :

Code:

CREATE OR REPLACE FUNCTION ajouter_matchspronos()
RETURNS trigger AS
$BODY$
DECLARE 
    prono_rec RECORD;

BEGIN
    FOR prono_rec IN SELECT id_pronostiqueur from pronostiqueurs
    LOOP

    insert into pronostics_matchs
        (id_match,competition,journee,num_match,id_parieur,equipe_dom,equipe_ext)
        VALUES(new.id_match,new.competition,new.journee,new.num_match, prono_rec.id_pronostiqueur, new.equipe_dom,new.equipe_ext);
    return NEW;

    END LOOP;
END;
$BODY$
  LANGUAGE plpgsql;
  
 
DROP TRIGGER ajouter_matchspronos ON top14;
CREATE TRIGGER ajouter_matchspronos AFTER INSERT
ON top14 FOR EACH ROW
EXECUTE PROCEDURE ajouter_matchspronos();

Tentative d’insertion qui doit (théoriquement) venir alimenter la table pronostics_matchs en y intégrant les pronostiqueurs

insert into top14

Code:

(competition,journee,num_match,equipe_dom,equipe_ext,date_match) values ('TOP14','J1','M1','RCT','ASM','2022-09-18 20:45:00')

En vous remerciant grandement par avance pour vos lumières. Si vous souhaitez des précisions, je suis à votre service.
Bonne soirée

Hors ligne

 

#2 Sat 13 August 2022 10:18

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostgreSQL - Fonction Trigger d'insert en boucle depuis autres tables

Ah, voila une chouette problématique.

Meme pas besoin de faire une BD, c'est le ST cette année big_smile

Hors ligne

 

#3 Sun 14 August 2022 13:40

Maverick83000
Participant occasionnel
Lieu: Toulon
Date d'inscription: 23 Jul 2014
Messages: 10

Re: PostgreSQL - Fonction Trigger d'insert en boucle depuis autres tables

^^ Va falloir penser à en laisser pour les autres mais vu le recrutement, ça serait pas étonnant ! Surtout avec la coupe du monde à la fin de l'année !

Dans le principe, on a définit un barême avec attributions de points pour chacun des matchs. Chacun pronostique un résultat pour chaque match et on a une distribution de points (prorata du nombre de joueurs) en fonction du bon vainqueur du match, de l'écart des scores, d'un bon bonus offensif ou défensif (le score exact étant le Saint Graal).

De ce fait, j'aimerais, à chaque journée, lorsque j'intègre les 7 matchs, ne pas avoir à intégrer les 7 matchs x le nombre de participants en Insert into et l'option de la Fonction Trigger semble indispensable (J'en ai déjà 2 autres plus simple pour la création des id_match et id_pronostique)

Je ne suis pas un grand expert des fonctions je dois avouer (mais j'ai d'autres qualités promis smile )... Si vous avez une idée de ce qui cloche dans ma fonction ? On dirait qu'il récupère le premier élément de la table pronostiqueurs mais qu'il ne boucle pas.

Merci beaucoup

Hors ligne

 

#4 Tue 16 August 2022 12:07

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 566
Site web

Re: PostgreSQL - Fonction Trigger d'insert en boucle depuis autres tables

Bonjour,

Oui, problématique sympa smile
Il ne boucle pas car il y a un return à l'intérieur de la boucle.

Dernière modification par jmarsac (Tue 16 August 2022 12:08)


Jean-Marie
Azimut

Hors ligne

 

Pied de page des forums

Powered by FluxBB