Erreur MYSQL 1111

Erreur MYSQL 1111 - PHP - Programmation

Marsh Posté le 22-08-2005 à 15:49:47    

Bonjour à tous,  :hello:  
 
Voila j'aimerai updater led ernier element de ma table sachant que je ne connait pas ce nombre voici ma requete:

Code :
  1. UPDATE Traitement SET EFFIC='$EFFICACITE' WHERE NUM=MAX(NUM)


[edit]oups voila  
Mais il me retourne : Erreur MYSQL 1111 : Invalid use of group function
comme erreur quelqu'un sait il pourquoi car apres recherche je ne sais toujours pas
 
Merci


Message édité par kenji_lol le 22-08-2005 à 16:08:00
Reply

Marsh Posté le 22-08-2005 à 15:49:47   

Reply

Marsh Posté le 22-08-2005 à 16:00:03    

Faut pas faire une requête imbriquée pour ça?
Parce que MAX() dans un UPDATE ja sais pas si ca marche...
 
Edit: Pourquoi t'a mis un spoiler sur ton message d'erreur?  :??:


Message édité par dwogsi le 22-08-2005 à 16:01:12

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2005 à 16:01:09    

acd je fais un select en premier et apres un update ?

Reply

Marsh Posté le 22-08-2005 à 16:02:25    

UPDATE Traitement SET EFFIC='$EFFICACITE' WHERE NUM=(SELECT MAX(NUM) FROM Traitement LIMIT 1)
 
Queqlue chose comme ca ca doit marcher, enfin j'ais pas testé


Message édité par dwogsi le 22-08-2005 à 16:06:20

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 22-08-2005 à 16:14:50    

essaye
UPDATE Traitement t1, Traitement t2
SET t1.EFFIC='$EFFICACITE'
WHERE t1.NUM=MAX(t2.NUM)
 
Ce n'est pas un probléme de php mais de sql.
Si t'as eu ce probléme, c'est par ce que max() est une fonction qui prend le maximum de plusieurs lignes. Ca c'est OK.
Le probléme, c'est que les comparaisons telles que = sont des comparaisons ligne par ligne et non pas des comparaisons par groupes. En clair, si tu indiques la même table des deux côtés du comparateur, il ne poura pas comparer à un ensemble de ligne. Il lui est donc impossible d'appliquer le 'max'.
Une solution, c'est de lui faire croire qu'on lui fournis deux tables en donnant des alias à la table. (le role de t1 et t2) Grace à ça, il poura faire un regroupement d'un côté et comparer ensuite les lignes de l'autre exemplaire de la table par celui où le max est appliqué.

Reply

Marsh Posté le 22-08-2005 à 16:22:27    

ca veut dire que je dois creer une autre table traitement t2 ??
bah non moi je veux pas


Message édité par kenji_lol le 22-08-2005 à 16:25:45
Reply

Marsh Posté le 22-08-2005 à 16:27:12    

non pas deux tables, ce sont des alias

Reply

Marsh Posté le 22-08-2005 à 16:45:53    

c'est bon voici :
 

Code :
  1. SELECT MAX(NUM) as dernier FROM Traitement WHERE NUMP=$NUMP AND NUMD=$NUMD
  2. UPDATE Traitement SET EFFIC='$EFFIC' WHERE NUM=dernier


et cela fonctionne  :D  
Merci pour vos reponse

Reply

Marsh Posté le 22-08-2005 à 16:51:53    

kenji_lol a écrit :

ca veut dire que je dois creer une autre table traitement t2 ??
bah non moi je veux pas


on ne cré évidement pas deux tables identique, on fait le traitement sur deux alias d'une même table.
En gros, c'est comme si t'avais une liste dans un classeur, en tant normal, tu prend un stylo et tu parcours le classeur.
Là, t'en prend deux, le premier pour chercher le max et noter sa valeur, et le second pour parcourir l'ensemble du classeur une fois le max trouvé afin de repérer ceux qui sont égal au max.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed