Auto-increment multiple - SQL/NoSQL - Programmation
Marsh Posté le 24-05-2009 à 20:05:21
Si je le fait à la main, imaginons que je souhaite ajouter un bug relatif a un projet, je doit d'abord récupérer le plus grand ID déjà utilisé pour ce projet. Je procède donc ainsi:
SELECT MAX(id) FROM bug WHERE project_id = 1
J'incrément cette valeur ainsi obtenu de 1 pour la stocker dans une variable nommé new_id
Je peux enfin faire:
INSERT INTO `bug` (`id`, `project_id`, `label`) VALUES (
new_id,
'1',
'Un bug'
);
Y a-til une façon d'effectuer cela en une seule requête en MySQL? Si je remplace new_id directement par la requête SELECT comme ceci:
INSERT INTO `bug` (`id`, `project_id`, `label`) VALUES (
SELECT MAX(id) FROM bug WHERE project_id = 1,
'1',
'Un bug'
);
j'ai une erreur #1093 - You can't specify target table 'bug' for update in FROM clause
Marsh Posté le 25-05-2009 à 10:37:41
Essaye ça ... j'ai pas vérifié niveau syntaxe Mysql ...
INSERT INTO `bug` (`id`, `project_id`, `label`)
(SELECT MAX(id) FROM bug WHERE project_id = 1,
'1',
'Un bug'
from `bug`);
Marsh Posté le 25-05-2009 à 10:41:07
le moyen le plus propre que je vois pour gérer ça, c'est de mettre en place un trigger ( declencheur)
Marsh Posté le 25-05-2009 à 10:49:47
vttman2> il y a effectivement des petits souci niveau syntaxique
flo850> va falloir que je me renseigne sur comment les trigger marchent.
Merci pour vos aides
Marsh Posté le 25-05-2009 à 10:53:12
J'ai trouvé ce site avec plein d'info/tuto sur MySQL: http://www.mysqltutorial.org/
Je vais essayé de lire ça cette semaine (soir et WE vu que c'est un projet perso </mylife> )
Marsh Posté le 25-05-2009 à 11:15:10
Si les sequences existent pas niveau mysql
alors effectivement se pencher vers triggers (déclencheurs)
Marsh Posté le 24-05-2009 à 19:32:14
Bonjour à tous,
J'ai une petite question concernant l'auto-increment:
Imaginons la relation suivante:
La table "project" permet de répertorier le nom de divers projets.
La table "bug" permet de répertorier une liste de bug associer à un projet.
Mon problème est le suivant:
Je souhaite avoir un identifiant de bug qui s'auto-incrémente pour chaque projet. Ainsi, si j'ai les projets "Toto" et "Titi" et que j'ai pour chacun de ces projets plusieurs bugs, ça donnerait quelque chose comme ceci:
project:
id | name
0 | "Toto"
1 | "Titi"
et
bug:
id | project_id | label
0 | 0 | "Un bug"
1 | 0 | "Un autre bug"
2 | 0 | "Un autre autre bug"
0 | 1 | "Un autre autre autre bug"
1 | 1 | "Un autre autre autre autre bug"
2 | 1 | "Un autre autre autre autre autre bug..."
Hors, ça si je laisse l'auto-incremente de bug.id s'auto-incrémenter et que je ne renseigne que project_id et label quand je créer une nouvelle entré dans bug, j'obtien le résultat suivant:
bug:
id | project_id | label
0 | 0 | "Un bug"
1 | 0 | "Un autre bug"
2 | 0 | "Un autre autre bug"
3 | 1 | "Un autre autre autre bug"
4 | 1 | "Un autre autre autre autre bug"
5 | 1 | "Un autre autre autre autre autre bug..."
Y a-t'il une façon élégante de faire repartir l'auto-incrément de 0 pour chaque nouveau projet?