MySQL: INSERT avec MAX

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : MySQL: INSERT avec MAX

par zeus » 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 :?

par Furax » 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".

Re: MySQL: INSERT avec MAX

par zeus » 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.

par mojorisin » 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...

MySQL: INSERT avec MAX

par Furax » 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!