|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
J'ai un cas un peu particulier.
Je travaille avec 2 tables. La 1ère contient les données suivantes : Commande / Client / Date chargement / heure de chargement / ... Je peux avoir plusieurs lignes contenant le même client/date/heure, mais le n° de commande est toujours différents. Ma seconde table doit reprendre : Client / Date chargement / heure de chargement / Mais je ne peux avoir qu'une seule ligne par date/heure/client. J'ai donc un formulaire qui me permets d'encoder l'heure de chargement en fonction de la commande dans la 1ère table et, en même temps, lors de sa validation, une ligne doit être ajoutée dans la seconde table, sauf si celle-ci existe déjà. Je pensais utiliser la fonction WHERE NOT EXISTS, mais elle ne semble pas fonctionner (ou alors, j'ai fait une erreur de syntaxe). Est-ce que qqun peut m'aider à résoudre mon problème ? Merci d'avance. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
tu mets une clé unique sur la seconde table, et elle refusera les insertions d'elle-même.
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Merci pour la réponse
J'ai mis une clé unique sur l'ID de cette table et ça ne fonctionne pas. Une autre idée. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Qu'est-ce que tu fais, quel message d'erreur obtiens-tu ?
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Je n'ai aucun messsage d'erreur, les lignes sont dupliquées sans problème.
|
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
OK. Peux-tu me donner la requête de création de ta clé unique (ou le SHOW CREATE TABLE de ta seconde table), ainsi que ta requête d'insertion ?
|
|
|
00
|
|
|
#7 | ||||||
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Tout d'abord, merci pour ton aide.
En fait, j'utilise PhPmyAdmin pour gérer ma table, je crée donc ma clé unique avec ça. Il exécute la commande Code :
Code :
Code :
J'espère que ces données pourront t'aider. |
||||||
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Il faut que tu mettes la clé unique sur la combinaison date/heure/client. Sur la clé primaire, ça ne sert à rien.
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Génial, ça fonctionne parfaitement dans ce cas de figure.
Merci beaucoup pour ton aide. Cependant, il me reste un petit détail à régler. Il faut également que je tienne compte du fait que les champs "date" et "heure" peuvent être modifié. Ce qui signifie que, dans l'état actuel des choses, il me fait toujours un INSERT et je me retrouve donc avec une nouvelle ligne. Maintenant, est-ce que je peux me servir de cette clé unique pour effectuer un contrôle dans ma requête et, ainsi, passer un UPDATE sur l'id retourné ? Pour info, "sql's nOOb" inside |
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
oui, avec la syntaxe INSERT INTO... ON DUPLICATE KEY UPDATE.
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Merci pour ta réponse.
Ca ne fonctionne pas. Je pense que c'est du au fait que les champs qui peuvent être modifiés font partie de la clé unique, non ? |
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
J'ai trouvé la solution.
J'enregistre l'id de la 1ère table dans la seconde et je la définis comme clé unique. Vu que celle-ci ne change jamais, ça fonctionne parfaitement. Un grand merci pour ton coup de main et surtout pour le "ON DUPLICATE KEY UPDATE". Je ne connaissais pas, mais je vais devoir m'en resservir qques fois dans mon programme.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com