Forum Clubic

[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: