IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Procédure stockée sur plusieurs tables


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Points : 64
    Points
    64
    Par défaut Procédure stockée sur plusieurs tables
    Bonjour !

    Je souhaite écrire une procédure stockée, mais je n'en ai jamais fais, du coup je souhaiterais avoir l'avis d'experts si possible

    J'explique la situation avant.
    J'ai 5 tables, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    CREATE TABLE `themes` (
    	`id`			int(11)	NOT NULL AUTO_INCREMENT,
    	`name`		varchar(32)	NOT NULL,
    	`created`		datetime	NOT NULL,
    	`modified`		datetime	NOT NULL,
    	`description`	text		NULL, 
    	`icone_id`		int(11)	NOT NULL,
    	`user_id`		int(11)	NOT NULL,
    	`hist_user`        varchar(20) NOT NULL,
    	`etat`		char(1)  	NOT NULL,
    	`commentaire`	varchar(450)NULL,
    	`date_valid`	datetime	NULL,
    	`admin_valid`	varchar(20)	NULL,
    	PRIMARY KEY(`id`),
      	KEY `user_id` (`user_id`),
      	KEY `icone_id` (`icone_id`)
    );
     
     
    CREATE TABLE `hist_themes` (
    	`hist_id`       int(11)     NOT NULL AUTO_INCREMENT,
    	`id`		   int(11)	NOT NULL,
    	`name`			varchar(32)	NOT NULL,
    	`created`		datetime	NOT NULL,
    	`modified`		datetime	NOT NULL,
    	`description`	text		NOT NULL, 
    	`icone_id`		int(11)		NOT NULL,
    	`user_id`		int(11)		NOT NULL,
    	`etat`			char(1)  	NOT NULL,
    	`commentaire`	varchar(450)NOT NULL,
    	`hist_date`     date        NOT NULL,
    	`hist_time`     time        NOT NULL,
    	`hist_user`     varchar(20) NOT NULL,
    	`hist_comm`     char(6)     NOT NULL,
    	PRIMARY KEY(`hist_id`)
    );
     
    CREATE TABLE `contributions` (
    	`id`				int(11)		NOT NULL AUTO_INCREMENT,
    	`created`			datetime	NOT NULL,
    	`modified`			datetime	NOT NULL,
    	`user_id`			int(11)		NOT NULL,
    	`type`				varchar(30)	NOT NULL,
    	`attente_theme_id`	int(11)		NOT NULL,
    	`attente_item_id`	int(11)		NULL,
    	`etat`				char(1)  	NOT NULL,
    	`hist_user`     	      varchar(20) NOT NULL,
    	PRIMARY KEY(`id`)
    );
     
    CREATE TABLE `hist_contributions` (
    	`hist_id`      		int(11)     NOT NULL AUTO_INCREMENT,
    	`id`				int(11)		NOT NULL,
    	`created`			datetime	NOT NULL,
    	`modified`			datetime	NOT NULL,
    	`user_id`			int(11)		NOT NULL,
    	`type`				varchar(30)	NOT NULL,
    	`attente_theme_id`	int(11)		NOT NULL,
    	`attente_item_id`	int(11)		NULL,
    	`etat`				char(1)  	NOT NULL,
    	`hist_user`    		varchar(20) NOT NULL,
    	`hist_date`     	date        NOT NULL,
    	`hist_time`     	time        NOT NULL,
    	PRIMARY KEY(`hist_id`)
    );
     
    CREATE TABLE `attente_themes` (
    	`id`			int(11)		NOT NULL AUTO_INCREMENT,
    	`name`			varchar(32)	NOT NULL,
    	`created`		datetime	NOT NULL,
    	`modified`		datetime	NOT NULL,
    	`description`	text		NULL, 
    	`icone_id`		int(11)		NOT NULL,
    	`user_id`		int(11)		NOT NULL,
    	`hist_user`     varchar(20) NOT NULL,
    	`etat`			char(1)  	NOT NULL,
    	`commentaire`	varchar(450)NULL,
    	`date_valid`	datetime	NULL,
    	`admin_valid`	varchar(20)	NULL,
    	PRIMARY KEY(`id`),
      	KEY `user_id` (`user_id`),
      	KEY `icone_id` (`icone_id`)
    );
    En gros, quand mon utilisateur ajoute un thème, celui-ci est ajouté dans la table 'attente_theme', et un nouvel enregistrement est créé dans la table 'contributions' (et dans la table hist_contributions à l'aide d'un trigger).
    A cet instant le champ "etat" dans ma table attente_theme est à "A".

    Quand mon administrateur va cliquer sur la contributions correspondante au thème ajouté, il va pouvoir valider ou refuser le thème.
    Pour le moment je me concentre sur la situation où il valide.

    Quand il validera le thème dans la table "attente_themes", le champ "etat" prendra la valeur "V". Ce qui impliquera plusieurs actions que je souhaite mettre dans une procédure. Pour le moment j'ai fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DELIMITER |
    CREATE PROCEDURE validAddTheme(IN idThemeCree INT)
    BEGIN
    	IF attente_themes.etat = 'V'
    		INSERT INTO `themes` (`id`, `name`, `created`, `modified`, `description`, `icone_id`, `user_id`, `hist_user`, `etat`, `commentaire`, `date_valid`, `admin_valid`) VALUES
    		(attente_themes.id, attente_themes.client, attente_themes.created, attente_themes.modified, attente_themes.description, attente_themes.icone_id, attente_themes.user_id, attente_themes.hist_user, attente_themes.etat, attente_themes.commentaire, attente_themes.date_valid, attente_themes.admin_valid);
    		INSERT INTO `hist_contributions` (`id`, `created`, `modified`, `user_id`, `type`, `attente_theme_id`, `hist_etat`, `hist_admin`, `hist_date`, `hist_time`) VALUES
    		(contributions.id, contributions.created, contributions.modified, contributions.user_id, contributions.type, contributions.attente_theme_id, attente_themes.etat, attente_themes.admin_valid, current_date(), current_time());
    		DELETE FROM `attente_themes` WHERE attente_themes.id = idThemeCree;
    		DELETE FROM `contributions` WHERE contributions.attente_theme_id = idThemeCree;
    END |
    Ca explique globalement ce que je souhaite faire.
    Donc quand le champ "etat" prendra la valeur "V", je souhaite copier mon enregistrement de "attente_themes" à "themes" (ce qui va déclencher le trigger pour hist_themes), je souhaite qu'un nouvel enregistrement se créé dans ma table hist_contributions. Puis que le thème ajouté disparaisse de ma table attente_themes, de même que la contribution qui le concerne.

    Je sais pas trop si je suis claire xD

    Bref. Pour le moment, j'ai fais ça, mais je ne sais pas si c'est vraiment possible d'utiliser plusieurs tables comme ça :/

    Merci d'avance pour vos conseils, et votre aide

    Ju'

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 344
    Points : 18 919
    Points
    18 919
    Par défaut
    Salut Anju44.

    Citation Envoyé par Anju44
    Je sais pas trop si je suis claire xD
    A vrai dire, si j'ai à peu près compris ce que vous désirez faire, vous devez formuler autrement votre demande.

    Prenons votre semblant de procédure stockée.
    Vous mettez : IF attente_themes.etat = 'V'
    Or ceci suppose que votre critère de déclenchement se fait à partir de la table attente_themes, avec etat = 'V'.

    C'est très bien pour ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO `themes` (`id`, `name`, `created`, `modified`, `description`, `icone_id`, `user_id`, `hist_user`, `etat`, `commentaire`, `date_valid`, `admin_valid`) VALUES
    (attente_themes.id, attente_themes.client, attente_themes.created, attente_themes.modified, attente_themes.description, attente_themes.icone_id, attente_themes.user_id, attente_themes.hist_user, attente_themes.etat, attente_themes.commentaire, attente_themes.date_valid, attente_themes.admin_valid);
     
    DELETE FROM `attente_themes` WHERE attente_themes.id = idThemeCree;
    Mais comment faites-vous le lien entre la table attente_themes et ces autres requêtes, ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO `hist_contributions` (`id`, `created`, `modified`, `user_id`, `type`, `attente_theme_id`, `hist_etat`, `hist_admin`, `hist_date`, `hist_time`) VALUES
    (contributions.id, contributions.created, contributions.modified, contributions.user_id, contributions.type, contributions.attente_theme_id, attente_themes.etat, attente_themes.admin_valid, current_date(), current_time());
     
    DELETE FROM `contributions` WHERE contributions.attente_theme_id = idThemeCree;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Points : 64
    Points
    64
    Par défaut
    Bonjour

    Merci pour votre réponse !
    J'ai finalement réussi à faire ce que je voulais, mais en PHP

    Merci quand même !

    Ju'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appliquer une procédure stockée sur le contenu d'une table
    Par teks9 dans le forum Développement
    Réponses: 5
    Dernier message: 09/09/2008, 14h40
  2. Procédure stockée - Retourner plusieurs ligne d'une table
    Par ronando dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/11/2005, 14h19
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 20h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 18h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo