Page 1 sur 1

MySQL: INSERT avec MAX

Posté : 19 nov. 2008, 00:01
par Furax
Bonjour,

J'utilise MySQL 5.0.
Je souhaiterais insérer un nouvel enregistrement donc un des champs prendrait la valeur maximale enregistrée dans celui-ci, +1

Par exemple mon champ "ordre" a, tous enregistrements confondus dans la table, une valeur maxi de 15.
Je voudrais que mon INSERT mette donc cette valeur à 16.

Voici ma requête:

INSERT INTO matable (champ1, ordre) VALUES ("blabla", "MAX(ordre)+1")

La requête ne renvoie pas d'erreur mais cela ne fonctionne pas.
Je suis donc à la recherche d'une solution... :)

Merci!

Posté : 19 nov. 2008, 07:40
par mojorisin
Bonjour,
il me semble que la seule solution pour effectuer ceci en une seule requete est d'utiliser une sous requete avec un insert .. select.

CREATE TABLE `table1` (
`id` int(5) NOT NULL auto_increment,
`nom` varchar(20) NOT NULL,
`ordre` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO table1 SELECT NULL,'sffsf',COALESCE(MAX(ordre),0)+1 FROM table1

Le coalesce est la pour éviter d'enregistrer un ordre à 0 si la table est vide.

Peut-être qu'une solution plus simple est disponible...

Re: MySQL: INSERT avec MAX

Posté : 19 nov. 2008, 09:21
par zeus
Je pense que l'erreur viens du fait qu'il ne faut pas mettre de " autour d'une instruction SQL comme MAX

Code : Tout sélectionner

INSERT INTO matable (champ1, ordre) VALUES ("blabla", MAX(ordre)+1)
Mais le COALESCE reste une excellente idée.

Posté : 19 nov. 2008, 10:19
par Furax
Merci beaucoup, le COALESCE fonctionne parfaitement.
J'ai essayé la requête sans les guillemets mais j'ai une erreur: "Invalid use of group function".

Posté : 19 nov. 2008, 10:30
par zeus
Ouais Furax, j'ai dit n'importe nawak ....

Quand j'ai vu cette erreur, j'ai pensé qu'il suffisait de la corriger alors qu'il faut un SELECT pour faire un MAX

Au temps pour moi :?