[MySQL] problème de requete imbriquée

:stuck_out_tongue:

J’aimerais faire une requete INSERT en insérant dans un champ la valeur + 1 du dernier champ.
avec une image de la structure c’est plus clair

http://img89.exs.cx/img89/4813/structure2bs.th.jpg

j’aimerais insérer dans le champ « ordre » le numéro 12, le numéro 11 étant le dernier utilisé (« ordre » n’est pas auto_incrément, et c’est pas le but)

quans je fait cette requete
[cpp]INSERT INTO site_menu (ordre,titre,url,new) VALUES ((SELECT (ordre + 1) FROM site_menu ORDER BY ordre DESC LIMIT 1),‹ Mon URL ›,‹ url.htm ›,0)[/cpp]

j’ai une erreur.

pourtant la requete imbriquée [cpp]SELECT (ordre + 1) FROM site_menu ORDER BY ordre DESC LIMIT 1[/cpp] fonctionne correctement tout seule.

d’où ça peut venir ?

d’une mysql et les requêtes imbriquées… :slight_smile:
de deux, je ne crois pas que ce soit possible même si ça semble logique.

Pourquoi ne pas tenter un INSERT INTO t (a, …, z) SELECT ?

j’ai déjà réussi à faire des requete imbriquées dans MySQL.

j’ai pas compris ta solution.
?

je crois que sn veut parler d’une requète INSERT … SELECT :oui:

mais bon, moi je comprends pas pourquoi tu ne fais pas un bête :
INSERT INTO site_menu (ordre,titre,url,new) VALUES ( MAX(ordre)+1 ,‹ Mon URL ›,‹ url.htm ›,0) :??:
au moins, ce serait compatible avec MySQL < 4.1 :smiley:

Kiss> ça marche?

bah moi c’est comme ça que je faisais avant que je ne comprennes à quoi servais les auto_increment :smiley:
mais je le faisais peut-être en deux requètes en effet (tu me fais douter lol) :confused:

'fin dans ce cas, un
INSERT INTO site_menu (ordre,titre,url,new) VALUES ((SELECT MAX(ordre) + 1 FROM site_menu),‹ Mon URL ›,‹ url.htm ›,0)
seras de toute façon meilleur que l’espèce de truc machin original proposé par NeqO :smiley:

aucun des deux ne fonctionne :o

:frowning:

Ben dans ce cas :slight_smile: tu sais ce qu’il te reste à faire :slight_smile:

Construire ta requête via mySQL (eg: SELECT CONCAT(‹ UPDATE › , …))

j’ai po compris [:matleflou] [:zjk3]

les sous requete marche pas dans toutes les version de mysql 4.1+ je crois…
sans-nom te propose de creer ta requete comme un resultat d’une premiere requete…

ps : les requete imbrique comme tu les utilise dans ton insert c dangereux parce que tu ne sais pas comment et dans quel ordre sont gérés les sous requetes…

tu peux utiliser LAST_INSERT_ID() (+1) en sql directement ou en php (faut etre dans la meme transaction quand meme cad le meme fichier script je pense a tester …)

Sinon le INSERT SELECT devrait le faire.

de mémoire pour faire ce genre de chose il faut utiliser une requête avec un « where not exists » comparant une première table avec elle même.

édit: avec beaucoup de chance sans nom a toujours ça dans ses vieux mp
sinon faut que je retrouve la logique.

zallez pas le croire.

mais SN à force de faire des moitiés de phrase on (je) comprend rien…

quazardous > j’ai compris, sauf que c’est pas une clé primaire ni un auto_inscrement, donc ça va pas aller LAST_INSERT_ID() :confused:

NeqO>

http://dev.mysql.com/doc/mysql/en/insert-select.html

t as plus qu a gerer une petite table ou tu met a jour l’ordre pour chaque meta occurence que tu veux…

je vais voir ça :jap: