Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/02/2008, 09h49   #1
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h32   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
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
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h34   #3
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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 ^^
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h00   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 13h39   #5
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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 :
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 :
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 14h07   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Je comprends mieux la logique comme ça !

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

Code :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 14h48   #7
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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

Citation:
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 :
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 ^^
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 15h13   #8
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 15h26   #9
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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 :
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=.....
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 15h46   #10
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 15h55   #11
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 16h13   #12
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
Oulala il est pas content

Code :
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 16h16   #13
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Quelle est ta version de MySQL ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 16h23   #14
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
Oups pardon désolé j'ai oublié de le spécifié, je tourne sur une debian etch sous mysql 5.032
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 16h26   #15
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Non, c'est moi qui déconne, ce n'est pas AS mais FOR EACH ROW :

Code :
1
2
3
4
CREATE TRIGGER Members_AU AFTER UPDATE ON forum.members 
FOR EACH ROW 
BEGIN 
...
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 16h43   #16
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
il a pas l'ait d'aimer le date_format

Code :
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 17h01   #17
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 17h28   #18
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
J'ai donc modifier comme ceci:

Code :
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:


Citation:
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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 17h30   #19
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 17h37   #20
Invité de passage
 
Inscription : février 2008
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 13
Points : 0
Points : 0
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:

Citation:
[ 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
Froufou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h44.


 
 
 
 
Partenaires

Hébergement Web