SQL: requete Update avec SELECT integré. - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : SQL: requete Update avec SELECT integré. (/showthread.php?tid=1492) Pages :
1
2
|
SQL: requete Update avec SELECT integré. - corentone - 20-07-2007 Bonjour! Voila j'ai differentes tables, et je veux faire un UPDATE Voila ma requete: Code : UPDATE soiree,dj SET dj.xp_dj=dj.xp_dj+((SELECT SUM(objet.xp_objet) FROM soiree LEFT JOIN dj ON dj.id_dj=soiree.id_dj LEFT JOIN matos ON matos.id_dj=dj.id_dj LEFT JOIN objet ON objet.id_objet=matos.id_objet WHERE soiree.date_soiree="2007-07-19" GROUP BY dj.id_dj)*3*(soiree.reussite_soiree+50))/100 WHERE soiree.id_dj=dj.id_dj AND soiree.date_soiree='2007-07-19' Le but étant d'augmenter l'xp du DJ. Lorsqu'elle est à part, la requete SELECT marche et donne bien une valeur numerique. Par contre, voila mon erreur: #1093 - You can't specify target table 'soiree' for update in FROM clause Donc si quelqu'un peut m'aider...a bientot Merci de tout coeur! Corentone RE: SQL: requete Update avec SELECT integré. - zigzog - 20-07-2007 Salut à toi, Oula! C'est le bazart la dedans... Ce serait plus simple à comprendre si c'etait bien rangé. Pourquoi tu ne fais tes calculs à part en creant des variables? $requete=mysql_query("SELECT SUM(objet.xp_objet) FROM soiree LEFT JOIN dj ON dj.id_dj=soiree.id_dj LEFT JOIN matos ON matos.id_dj=dj.id_dj LEFT JOIN objet ON objet.id_objet=matos.id_objet WHERE soiree.date_soiree="2007-07-19" GROUP BY dj.id_dj") $data=mysql_fetch_assoc($requete) $var1=$data['objet.xp_objet'] $var2=$var1*3*($soiree.reussite_soiree+50)/100 UPDATE soiree,dj SET dj.xp_dj=$var2 WHERE soiree.id_dj=dj.id_dj AND soiree.date_soiree='2007-07-19' Par contre je ne suis pas sur(pas verifié) que tes jointures étaient bonnes. Je suis encore un noob donc c'est pas bon à 100% Amicalement,ZigZog RE: SQL: requete Update avec SELECT integré. - NicoMSEvent - 20-07-2007 tu ne peux pas mettre a jour une table contenue dans ton select. par contre, essaye ceci : Code : UPDATE dj SET dj.xp_dj=dj.xp_dj+ Je n'ai pas testé, je sais pas si ça va marcher ou pas... sinon, il ne reste "plus qu'a " adapter Edit : erf, j'ai encore été pris de vitesse ^^ Edit2 : autre truc que j'ai remarqué, tu mets a jour TOUS les DJ de ta DB, donc, tu ne devrais exécuter cette requete qu'une seule fois par jour (en fait, c'est assez économe comme système) RE: SQL: requete Update avec SELECT integré. - corentone - 20-07-2007 Pas bete^^ c'est idiot je n'y avais pas pensé! je vais faire la resolution dans le select, et l'updater ensuite...quel boulet je suis^^ Par contre, oui l'interet de cette requete est de passer outre le PHP et de resoudre les evenements qu'avec une requete centralisée effectuée a une heure precise chaque jour en fait non! Ta requete est bien mais ne permet de pas d'updater seulemnt les Djs qui sont a la soirée , il me faut obligatoirement la table soiree pour ce test... donc ca ne marche pas :'( RE: SQL: requete Update avec SELECT integré. - NicoMSEvent - 21-07-2007 la table soiree est dans le select... il me semble que tout y est... pourrais tu décrire plus précisément ce que tu attends de la requete, sans laisser une miette de zone d'ombre? ^^ RE: SQL: requete Update avec SELECT integré. - corentone - 21-07-2007 Oui, j'avoue que ma demande n'est pas tres claire je vais essayer de faire court Voici mes tables et les champs qui nous interessent. Soiree: id_soiree, id_dj, date_soiree,reussite soirée.->repertorie les soirées. DJ:id_dj, xp_dj->repertorie les differents djs et leur carac matos, id_matos, id_dj, id_objet->repertorie tous les matos, individuellements objet: id_objet, xp_objet->repertorie les caracteristik de chak matos En fait, je veux ajouter au DJ l'XP: SUM(xp_objet)*3*(reussite_soiree+50)/100 Sachant que le DJ peut avoir jusqu"'a 6objets, d'ou la somme. par contre, je ne veux updater que les DJs dont l'id_dj est dans la table soiree, et dont la date de la soiree, date_soiree, est egale a un jour precis. D'ou mon ancienne requete, mais le probleme vient que je ne peux pas melanger update et select pour la meme table je ne sais pas si c'est plus clair pour vous que ma requete d'avant...mais je ne vois vraiment plus comment faire, je suis un peu bloqué la et ca membete Merci de votre (future) aide! RE: SQL: requete Update avec SELECT integré. - NicoMSEvent - 21-07-2007 Code : UPDATE dj SET dj.xp_dj=dj.xp_dj+ Il va mettre à jour l'xp de tous les DJ. Avec ce que je viens de rajouter comme morceau de code, la formule dans la requete ci dessus retourne 0 si le dj n'a pas participé a une soirée (donc en gros, xp_dj=xp_dj+0 => ça ne change rien). Ceci ne convient toujours pas? RE: SQL: requete Update avec SELECT integré. - corentone - 22-07-2007 Code : UPDATE dj SET dj.xp_dj=dj.xp_dj+( Voila la requete que j'ai testé dans phpmyadmin J'ai remplacé le NVL par un CEIL car mysql ne reconnait pas NVL Par contre, vraiment etonnament, cela a marché pour le DJ qui etait bien concerné,cela lui a bien ajouté son XP,mais cela a mis les XP des autres à 0!!!! Cela n'a pas fait +0, mais une autre operation qui a tout mis a zero!!! Je ne comprends pas vraiment, car la requete me semble bonne. Vraiment Merci de ton aide NicomsEvent,j'espere que tu peux m'aider encore un petit peu EDIT: une structure en IF serait possible ou pas? EDIT2: Voila la derniere MAJ que j'ai faite de la requete, elle a par contre modifiée TOUTES les XP, memes celles qui ne devaient pas etre modifiées! lol! Code : UPDATE dj SET dj.xp_dj=dj.xp_dj+( RE: SQL: requete Update avec SELECT integré. - NicoMSEvent - 22-07-2007 CEIL n'est pas la bonne fonction a employer. Le but de la manoeuvre était de remplacer la valeur NULL par 0.. je viens de (re)trouver la fonction equivalente à NVL pour Oracle, c'est IFNULL pour MySQL. Donc, remplace NVL (ou CEIL) par IFNULL, ça devrait marcher. Code : UPDATE dj SET dj.xp_dj=dj.xp_dj+( IFNULL(a,b) => si a est null, ça remplace par b... RE: SQL: requete Update avec SELECT integré. - corentone - 22-07-2007 Cette requete a remplacée les xp des DJ qui ne sont pas concernées par zero! alors que celui concerné a bien été modifié comme l'on veut! je ne comprends vraiment pas! Pourquoi mysql ne reprend-t-il pas cette ancienne valeur pour lui ajouter zero mais remplace-t-il tout par zero? |