MySQL: INSERT avec MAX

Eléphant du PHP | 67 Messages

19 nov. 2008, 00:01

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!

Eléphant du PHP | 217 Messages

19 nov. 2008, 07:40

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...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 nov. 2008, 09:21

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 67 Messages

19 nov. 2008, 10:19

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".

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 nov. 2008, 10:30

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 :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer