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 :

Aide pour une requete de comparaison de table et d'insertion


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut Aide pour une requete de comparaison de table et d'insertion
    Bonjour


    Il est vraiment très rare que je fasse appel a vous car je préfère largement apprendre et découvrir pas moi même, mais pour ce qui concerne ce problème actuel je ne maitrise absoumement pas les requete mysql.

    J'aurais besoin d'avoir une requete dont le but est de checker dans une base X la table "user" qui contient différent champs, les 2 qui m'interessent sont les champ "nom" et le champs "groupe",

    A coté de cela j'ai une base Y qui contient des tables, dont une qui s'appelle "compte" et qui contient les champs A,B,C,D,E,F,G ayant pour fonction:

    A>>id user qui est générer de facon chronologique int(11) NOT NULL auto_increment
    B> qui devra toujours avoir la valeur de 1 int(11) default NULL
    C> qui devra toujours avoir la valeur -1 int(11) default NULL
    D> qui devra etre égale aux champs user de la table X varchar(40) default NULL
    E> qui devra toujours avoir pour valeur le mot "toto" varchar(80) default NULL
    F> doit etre généré en fonction de la date du jour: jjmmaaahhmmss varchar(20) default NULL
    G> qui devra avoir la valeur <null> varchar(20) default NULL


    La requete devra faire en sorte que si le champs groupe de la tabel X à pour valeur 18 alors la requete remplira les champs dans la base Y en faisant en sorte que le contenu du champs D de la tabel Y soite égale au contenu du champs "user" de la table X.

    Le but de la manoeuvre étant de faire en sorte que l'ajout d'un membre dans la table X se répercute également dans la table Y une fois la requete exéxutée et automatisée.

    Amicalement

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Peux-tu nous en dire plus sur le contexte applicatif du problème ?

    Typiquement tu pourrais gérer cette insertion dans la table Y dans le code de ton application (s'il y en a une), ou l'automatiser avec un trigger sous MySQL 5.0 +
    Pensez au bouton

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'en suis a la page 64 du forum et j'ai vu qu'il existait une fonction trigger, celle-ci de ce que j'ai compris me permettrais également de faire en sorte que si je modifi le group de la table X alors la modification sera automatiquement détecté et pourrait aussi incrémenter ma table X ce qui serai plus pratique ^^

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    A quoi servent tes colonnes B, C, E et G ?
    Ta colonne F devrait être en TIMESTAMP et non en VARCHAR.
    Pourquoi ne pas donner des noms de colonnes explicites ?

    [EDIT] la page 64 du forum ???
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Bah oui la page 64, comme je n'ai rien trouvé de flagrant dans le moteur de recherche et bien je reagarde tous les topic crés

    Pour expliquer un peu plus, je dispose de 2 base, une est la base d'un forum et l'autre la base d'un serveur vocal

    Ce qui m'interesse c'est la table user du forum et la table client du serveur vocal, la table user contient des centaines de membre enregistré, parmis ces membres il y en a qui sont dans un group particulier a savoir le groupe 18, ce que je veux c'est que si un membres est dans le groupe 18 de la table user du forum alors la requete creera une entré dans la table client de la base serveur vocal en rensigneant les champs.

    table du serveur vocal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE `clients` (
      `i_client_id` int(11) NOT NULL auto_increment,
      `i_client_server_id` int(11) default NULL,
      `b_client_privilege_serveradmin` int(11) default NULL,
      `s_client_name` varchar(40) default NULL,
      `s_client_password` varchar(80) default NULL,
      `dt_client_created` varchar(20) default NULL,
      `dt_client_lastonline` varchar(20) default NULL,
      PRIMARY KEY  (`i_client_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;

    table du forum:

    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
     
    CREATE TABLE `members` (
      `id` mediumint(8) NOT NULL default '0',
      `name` varchar(255) NOT NULL default '',
      `mgroup` smallint(3) NOT NULL default '0',
      `email` varchar(150) NOT NULL default '',
      `joined` int(10) NOT NULL default '0',
      `ip_address` varchar(16) NOT NULL default '',
      `posts` mediumint(7) default '0',
      `title` varchar(64) default NULL,
      `allow_admin_mails` tinyint(1) default NULL,
      `time_offset` varchar(10) default NULL,
      `hide_email` varchar(8) default NULL,
      `email_pm` tinyint(1) default NULL,
      `email_full` tinyint(1) default NULL,
      `skin` smallint(5) default NULL,
      `warn_level` int(10) default NULL,
      `warn_lastwarn` int(10) NOT NULL default '0',
      `language` varchar(32) default NULL,
      `last_post` int(10) default NULL,
      `restrict_post` varchar(100) NOT NULL default '0',
      `view_sigs` tinyint(1) default '1',
      `view_img` tinyint(1) default '1',
      `view_avs` tinyint(1) default '1',
      `view_pop` tinyint(1) default '1',
      `bday_day` int(2) default NULL,
      `bday_month` int(2) default NULL,
      `bday_year` int(4) default NULL,
      `new_msg` tinyint(2) default '0',
      `msg_total` smallint(5) default '0',
      `show_popup` tinyint(1) default NULL,
      `misc` varchar(128) default NULL,
      `last_visit` int(10) default '0',
      `last_activity` int(10) default '0',
      `dst_in_use` tinyint(1) default '0',
      `view_prefs` varchar(64) default '-1&-1',
      `coppa_user` tinyint(1) default '0',
      `mod_posts` varchar(100) NOT NULL default '0',
      `auto_track` varchar(50) default '0',
      `org_perm_id` varchar(255) default '',
      `temp_ban` varchar(100) default '0',
      `sub_end` int(10) NOT NULL default '0',
      `login_anonymous` char(3) NOT NULL default '0&0',
      `ignored_users` text,
      `mgroup_others` varchar(255) NOT NULL default '',
      `member_login_key` varchar(32) NOT NULL default '',
      `member_login_key_expire` int(10) NOT NULL default '0',
      `has_blog` tinyint(1) NOT NULL default '0',
      `subs_pkg_chosen` smallint(3) NOT NULL default '0',
      `members_auto_dst` tinyint(1) NOT NULL default '1',
      `members_cache` mediumtext,
      `members_disable_pm` int(1) NOT NULL default '0',
      `members_display_name` varchar(255) NOT NULL default '',
      `members_created_remote` tinyint(1) NOT NULL default '0',
      `members_editor_choice` char(3) NOT NULL default 'std',
      `members_markers` text,
      `members_profile_views` int(10) unsigned NOT NULL default '0',
      `members_l_display_name` varchar(255) NOT NULL default '0',
      `members_l_username` varchar(255) NOT NULL default '0',
      `failed_logins` text,
      `failed_login_count` smallint(3) NOT NULL default '0',
      `has_gallery` int(1) default '0',
      PRIMARY KEY  (`id`),
      KEY `mgroup` (`mgroup`),
      KEY `bday_day` (`bday_day`),
      KEY `bday_month` (`bday_month`),
      KEY `members_l_display_name` (`members_l_display_name`),
      KEY `members_l_username` (`members_l_username`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    pour la requete:


    si dans la table mgroup= 18 alors créer une entrée dans la table client et faire en sorte que name de la table members = s_client_name de la table clients

    i_client_id devra donc etre incrémenté tout seul
    i_client_server_id`devra avoir pour valeur 1,
    b_client_privilege_serveradmin -1
    s_client_name = name
    s_client_password devra avoir pour valeur toto
    dt_client_created date d'intégration du membre jjmmaaahhmmss
    dt_client_lastonline devra avoir pour valeur <null>


    J'espère que mon complément d'information saura vous éclairer

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je comprends mieux la logique comme ça !

    Donc, si je suppose que tes bases s'appellent forum et serveurvocal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER Members_AI AFTER INSERT ON forum.members
    AS
    INSERT INTO serveurvocal.clients (
      i_client_server_id, -- 1
      b_client_privilege_serveradmin, -- -1
      s_client_name,  -- mgroup
      s_client_password, -- toto
      dt_client_created -- now
    )
    VALUES (1, -1, 'mgroup', 'toto', date_format(now(), '%Y%m%d%H%i%s') 
    ) ;
    Mais attention, le trigger ne te permettra pas de récupérer ce qui s'est fait avant sa création.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Ce me plait bien ca ^^ par contre de ce que je comprend avec mes maigres capacité c'est que si j'ajoute un membre dans la table forum ca va ajouter le membre dans la table serveurvocal, or le membre ne doit s'ajouter dans la table serveurvocal que si l'on place le membre de la table forum dans le group 18 (champs mgroup) et a ce moment il prend la valeur du champs name de la table forum pour le placer dans le champs s_client_name de la table serveur vocal

    si dans la table forum mgroup= 18 alors créer une entrée dans la table client et faire en sorte que name de la table members = s_client_name de la table clients
    Ansi sur mon forum quand je passe un membre du group 6 ou group 18 ca fait automatiquement l'insert dans la table serveurvocal en reprenant le champs name de la table forum pour le placer dans le champ s_client_name de la table serveur vocal


    Ca serai peut etre un truc dans ce gout la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER Members_AI AFTER INSERT ON forum.members
    "la faut mettre un truc pour dire que si mgroup=18 alors on fait la suite"
    AS
    INSERT INTO serveurvocal.clients (
      i_client_server_id, -- 1
      b_client_privilege_serveradmin, -- -1
      s_client_name,  -- name  
      s_client_password, -- toto
      dt_client_created -- now
    )
    VALUES (1, -1, name, 'toto', date_format(now(), '%Y%m%d%H%i%s') 
    ) ;
    j'ai corriger le s_client_name car j'avais indiqué que je voulais la valeure mgroup alors que je veux bien evidement la valeur du name ^^

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par Froufrou
    or le membre ne doit s'ajouter dans la table serveurvocal que si l'on place le membre de la table forum dans le group 18
    (...)
    j'ai corriger le s_client_name car j'avais indiqué que je voulais la valeure mgroup alors que je veux bien evidement la valeur du name ^^
    Ah oui, j'ai oublié l'histoire du groupe 18
    Avec la modif sur le name, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TRIGGER Members_AI AFTER INSERT ON forum.members
    AS
    BEGIN
      IF new.mgroup = 18 THEN
        INSERT INTO serveurvocal.clients (
        i_client_server_id, -- 1
        b_client_privilege_serveradmin, -- -1
        s_client_name,  -- new.name
        s_client_password, -- toto
        dt_client_created -- now
        VALUES (1, -1, new.name, 'toto', date_format(now(), '%Y%m%d%H%i%s') );
      END IF ;
    END ;
    Citation Envoyé par Froufrou
    Ansi sur mon forum quand je passe un membre du group 6 ou group 18 ca fait automatiquement l'insert dans la table serveurvocal en reprenant le champs name de la table forum pour le placer dans le champ s_client_name de la table serveur vocal
    Non, car c'est un trigger AFTER INSERT. Il faudrait en faire un autre qui soit AFTER UPDATE.
    Ensuite, dans ta table serveurvocal.clients, il est possible que le client existe déjà. Il faudrait en fait utiliser REPLACE INTO à la place de INSERT INTO, ou bien INSERT INTO... ON DUPLICATE KEY UPDATE.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    A mince, donc ca ne va pas allé car les membre sont dabord dans un group 6 puis au bout de X jours on les bascules en group 18, le plus simple serait alors je pense de se passer du trigger et de faire un requete.
    Pour info tout tourne sur un serveur dédié avec un accès ssh donc pas de soucis pour faire un cron qui s'exécute tous les jours avec les meme base a savoir que je lance la requete elle va checker le mgroup et si celui-ci est egal a 18 alors il fait les insert dans la tabel serveur vocal

    Ca marcherai ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT * FROM table WHERE group = 18
    AS
    BEGIN
    IF mgroup = 18 THEN
    INSERT INTO... ON DUPLICATE KEY UPDATE serveurvocal.clients (
      i_client_server_id, -- 1
      b_client_privilege_serveradmin, -- -1
      s_client_name,  -- name  
      s_client_password, -- toto
      dt_client_created -- now
    )
    VALUES (1, -1, name, 'toto', date_format(now(), '%Y%m%d%H%i%s') 
    ) ;
    Bon ok il me manque le début du code pour indiquer que Si dans la base forum et dans la table members le champs mgour=.....

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Pas tout à fait... le UPDATE ne s'écrit pas comme un INSERT.
    Par ailleurs, attention, c'est new.name et non pas name, new représenant les données modifiées.

    Ce serait donc ça :

    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
    CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members
    AS
    BEGIN
      IF new.mgroup = 18 THEN
        INSERT INTO serveurvocal.clients (
        i_client_server_id, -- 1
        b_client_privilege_serveradmin, -- -1
        s_client_name,  -- new.name
        s_client_password, -- toto
        dt_client_created -- now
        VALUES (1, -1, new.name, 'toto', date_format(now(), '%Y%m%d%H%i%s'))
        ON DUPLICATE KEY UPDATE i_client_server_id = 1, 
          b_client_privilege_serveradmin = -1, 
          s_client_name = new.name, 
          s_client_password = 'toto', 
          dt_client_created = date_format(now(), '%Y%m%d%H%i%s');
      END IF ;
    END ;
    Mais en fait, j'imagine que dans le cas d'un UPDATE, tu ne voudras pas modifier le mot de passe, ni peut-être la date de création, etc.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Mais en fait, j'imagine que dans le cas d'un UPDATE, tu ne voudras pas modifier le mot de passe, ni peut-être la date de création, etc.
    En fait pour le moment ca n'est pas génant, c'est déja super sympa de ta part de m'aider pour le mot de passe ce n'est pas bien grave a partir du moment ou il reprend le passe par défaut ^^

    Je fait un test pour voir si ca tourne

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Oulala il est pas content

    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
    requête SQL:
     
    CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members AS BEGIN IF new.mgroup =18 THEN INSERT INTO serveurvocal.clients(
    i_client_server_id,
    -- 1
    b_client_privilege_serveradmin,
    -- -1
    s_client_name,
    -- new.name
    s_client_password,
    -- toto
    dt_client_created-- now
     
    VALUES ( 1, -1, new.name, 'toto', date_format( now( ) , '%Y%m%d%H%i%s' ) ) ON DUPLICATE
    KEY UPDATE i_client_server_id =1,
    b_client_privilege_serveradmin = -1,
    s_client_name = new.name,
    s_client_password = 'toto',
    dt_client_created = date_format( now( ) , '%Y%m%d%H%i%s' ) ;
     
    MySQL a répondu:Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS
    BEGIN
      IF new.mgroup = 18 THEN
        INSERT INTO serveurvocal.clients (
        i' at line 2

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Quelle est ta version de MySQL ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Oups pardon désolé j'ai oublié de le spécifié, je tourne sur une debian etch sous mysql 5.032

  15. #15
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Non, c'est moi qui déconne, ce n'est pas AS mais FOR EACH ROW :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members 
    FOR EACH ROW 
    BEGIN 
    ...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    il a pas l'ait d'aimer le date_format

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VALUES ( 1, -1, new.name, 'toto', date_format( now( ) , '%Y%m%d%H%i%s' ) )  ON DUPLICATE
    KEY UPDATE i_client_server_id =1,
    b_client_privilege_serveradmin = -1,
    s_client_name = new.name,
    s_client_password = 'toto',
    dt_client_created = date_format( now( ) , '%Y%m%d%H%i%s' ) ;
     
    MySQL a répondu:Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES (1, -1, new.name, 'toto', date_format(now(), '%Y%m%d%H%i%s'))
        ON DUP' at line 7

  17. #17
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Il est très bien mon date_format ! d'ailleurs c'est le seul bout de code que j'ai testé !
    En fait, il te manque une ) avant VALUES.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'ai donc modifier comme ceci:

    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
    CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members 
    FOR EACH ROW 
    BEGIN 
      IF new.mgroup = 18 THEN
        INSERT INTO serveurvocal.clients (
        i_client_server_id, -- 1
        b_client_privilege_serveradmin, -- -1
        s_client_name,  -- new.name
        s_client_password, -- toto
        dt_client_created -- now )
        VALUES (1, -1, new.name, 'toto', date_format(now(), '%Y%m%d%H%i%s'))
        ON DUPLICATE KEY UPDATE i_client_server_id = 1, 
          b_client_privilege_serveradmin = -1, 
          s_client_name = new.name, 
          s_client_password = 'toto', 
          dt_client_created = date_format(now(), '%Y%m%d%H%i%s');
      END IF ;
    END ;
    J'ai essayé de l'envoyer via sql de phpmyadmin et via mysqlfront mais meme résultat:


    requête SQL:

    CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members FOR EACH ROW BEGIN IF new.mgroup =18 THEN INSERT INTO serveurvocal.clients(
    i_client_server_id,
    -- 1
    b_client_privilege_serveradmin,
    -- -1
    s_client_name,
    -- new.name
    s_client_password,
    -- toto
    dt_client_created-- now )

    VALUES ( 1, -1, new.name, 'toto', date_format( now( ) , '%Y%m%d%H%i%s' ) ) ON DUPLICATE
    KEY UPDATE i_client_server_id =1,
    b_client_privilege_serveradmin = -1,
    s_client_name = new.name,
    s_client_password = 'toto',
    dt_client_created = date_format( now( ) , '%Y%m%d%H%i%s' ) ;

    MySQL a réponduocumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES (1, -1, new.name, 'toto', date_format(now(), '%Y%m%d%H%i%s'))
    ON DUP' at line 6

  19. #19
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Via phpMyAdmin, il faut changer le séparateur ; par autre chose, par exemple #. C'est en bas à gauche dans les versions récentes (et ça n'existe pas du tout dans les plus anciennes).
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'avais bien fait attention au séparateur et dans ma version de phpmyadmin j'ai bien un champs pour lui indiqué le séparateur que j'utilise:

    [ Délimiteur ; ] Réafficher la requête après exécution
    Mais meme mysqlfront et sqlyog ne me le prenne pas en tout cas rien qu'aujourd'hui je suis content j'ai appris tout plein de truc en exercice pratique

Discussions similaires

  1. Aide pour une requete, deux table, un champ commun.
    Par Space Cowboy dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/03/2007, 10h59
  2. aide pour une requete
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/03/2005, 15h02
  3. Aide pour une requete SQL
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2005, 15h01
  4. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15
  5. Aide pour une requete ... "COUNT(*)"
    Par mechantebestiole dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/05/2004, 16h27

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