|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2005 Messages : 40 ![]() |
Salut tout le monde !
(Pour info je vais détailler mon problème, mais si vous voulez voir directement ma question, elle se trouve tout en bas ;-) Voilà je possède une table "maTable" contenant 3 champs : - id (int) - nom (varchar) - ordre (int) Passons les 2 premiers champs qui parlent d'eux-même, j'en viens directement au champ "ordre" qui permet de classer mes lignes dans l'ordre de mon choix, dans ma page web... Pour mettre à jour le classement d'une ligne, je fais deux requêtes MySQL : - La première requête permet d'incrémenter toutes les lignes dont le classement actuel est plus grand ou égal au nouveau classement à appliquer sur une ligne donnée (j'espère que vous suivez ;-). - La deuxième permet d'attribuer le nouveau classement sur ma ligne donnée... Bref, mon problème concerne en fait ma première requête (voici mes deux requêtes, disons par exemple que je souhaite passer mon produit dont l'ID est "24", à la position n° "10") : ********************************* UPDATE maTable SET ordre = ordre + 1 WHERE ordre >= 10 (*) AND ordre < MAX(ordre) <-- c'est là où ça coince :-S ********************************* (*) Le chiffre "10" indique donc dans ce cas que je souhaite classer ma nouvelle ligne à la 10è position, on est d'accord ;-). DEUXIÈME REQUÊTE : ********************************* UPDATE maTable SET ordre = '10' WHERE id = 24 ********************************* Voilà, revenons donc à ma première requête, et particulièrement à cette ligne, qui est la fautive : --> AND ordre < MAX(ordre) En gros ma première requête demande à incrémenter toutes les lignes de ma table dont l'ordre est >= 10, "SAUF la ligne dont le champ ORDRE a la valeur la plus grande" (AND ordre < MAX(ordre)). Je pensais que "ordre < MAX(ordre)" pourrait répondre à ma demande mais quand je mets cette ligne, il ne se passe rien... Donc ma question principale est (ENFIN !! :-) : "Comment incrémenter le champ "ordre" de toutes les lignes de ma table >= à un chiffre donné, SAUF la ligne où le champ "ordre" a la plus grande valeur ? Y a-t-il une autre requête possible ? Merci pour vos réponses, et @ bientôt. Tonton |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : avril 2004 Messages : 734 ![]() |
Bonjour,
euh... J'ai rien lu ! J'ai juste vu un MAX(*) dans une clause WHERE et ça... ça ne marche pas ! Il faut mettre les conditions utilisant les fonctions d'agrégation (MAX(), COUNT(), MIN()...) dans une clause HAVING.
__________________
Pensez au tag
|
|
|
00
|
|
|
#3 | |
|
Invité régulier
![]() Inscription : mai 2005 Messages : 40 ![]() |
Citation:
Merci d'avance. ;-) |
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : avril 2004 Messages : 734 ![]() |
Tu peux toujours tenter ceci :
Citation:
__________________
Pensez au tag
|
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mai 2005 Messages : 40 ![]() |
IMPECCABLE !!
Ca fonctionne à merveille, et ta requête, qui paraît un peu tordue aux premiers abords, est plutôt bien foutue en réalité. Heureusement que les pro comme toi existent Bon j'arrête ma lèche, et encore merci ! Seb |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com