Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2593 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  update spécial, variable dynamique et mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

update spécial, variable dynamique et mysql

n°513979
naeco
Buddy Rich Big Band
Posté le 13-09-2003 à 15:47:43  profilanswer
 

bonjour!
 
j'ai un probleme dont j'ai parlé malheureusement dans la mauvaise catégorie; voici le sujet:

Citation :


Voilà mon souci:
 
sur une page je génére un formulaire qui servira a modifier des valeur de trois champs sur $n entrée différente. j'ai donc 3*$n input de type texte auquel je donne les noms en concatenant l'"id" du l'entrée corespondante avec "_1" "_2" ou "_3" suiant qu'il sagissent du champ 1, 2, 3 a modifier.
 
 
Donc du coup, mes 3*$n input ont les nom (admettons que $n = 4)
 
1_1 1_2 1_3 2_1 2_2 2_3 3_1.. etc
 
dans la page suivante ou j'effectue effectivement le changement sur le BD, je voudrais effectuer une requette du genre:
 
$sql = "UPDATE `subject` SET toto = ${CONCAT(id,'_1')}";
 
un peu a la maniere de  
 
UPDATE persondata SET age=age*2, age=age+1;
 
( http://dev.nexen.net/docs/mysql/an [...] ien=update )
 
sauf que je veux que le contenu de "id "soit concaténé avec "_1" et que ce string soit interprété comme une variable dont le contenu doit etre entré dans le champ "toto"
 
et cette requette ne marche pas.
 
(je sais que là je modifirais qu'un champs si ca marcherait, mais c'est pour simplifier)
Pouriez vous m'aider?
 
note: en fait la vrai question c'est : les variables dynamique existent t'elle en mySQL??


 
 
voilà l'adresse du message original:
http://forum.hardware.fr/forum2.ph [...] at=393#bas
 
merci de votre aide! ;)

mood
Publicité
Posté le 13-09-2003 à 15:47:43  profilanswer
 

n°514004
naeco
Buddy Rich Big Band
Posté le 13-09-2003 à 16:23:24  profilanswer
 

un moyen de contourner le problème serait de pouvoir passer un champs dans une fonction genre
 
$sql = "UPDATE `subject` SET toto = ".test("id" )."";
 
mais j'ai essayer de le faire avec plein de syntaxes et je n'y arrive pas :(

n°514089
mrbebert
Posté le 13-09-2003 à 20:45:59  profilanswer
 

Tu peux accéder à unbe variable avec la syntaxe :
${"nom de la variable"}
 
Dans ton cas, ce serait un truc du genre :
${'id' . $i . '_' . $j}

n°514462
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 19:03:33  profilanswer
 

oui sauf que id doit etre remplacer à chaque tour dans la requette UPDATE par la valeur de l'id de l'enregistrement examiné en cour...
 
pour l'instant j'ai mis une boucle for pour faire tout les updates mais c'est assez catastrophique en terme d'acces a la BD :-/

n°514543
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 20:26:45  profilanswer
 

bon j'en ai parler longement avec un pot et vu comment on a galérer j'en deduis que mon esplication n'est pas clair du tout alors je recommence ;)
---------------------------------------------
je travail en php mysql
---------------------------------------------
j'ai une table nommé subject formé comme ceci:
 
id lang1 lang2 lang3 lang4
 
les lang de 1 à 4 sont les numeros des langues enregistré en id dans une autre table (languages), avec quantitées de traductions
 
l'id de la table subject est l'id d'un sujet X, "sujet" dans le meme etat d'esprit qu'un sujet d'un topic sur le forum (meme si ca n'a rien a voir, ici c'est un sujet de classement.) traduit dans les différentes langue. langX est de type varchar
 
le nombre de sujet et le nombre de lang n'est donc pas fixé.
 
 
l'idée est de vouloir rajouter une langue.
 
je genere donc un formulaire avec des input type="test" qui ont comme nom 1 2 3 4, numero des sujets. (en fait concaténé avec une chaine de caractere car sinon une variable avec un nom de chiffre ca ne marche pas)
 
dans la page ou j'effectue réélement les requettes,
 
dans un premier temps je fais un ALTER table pour ajouter la colone lang5
 
puis un update pour mettre a jour toutes les traductions des sujets dans cette nouvelle langue.
 
je devrais donc effecter autant d'update qu'il y a de sujet, ce qui est gerable avec une boucle for (c'est le systeme qui est en place, avec un autre systeme pour savoir les numeros car vu qu'il est possible de supprimer des langues et des sujets, des numeros d'id peuvent sauter), mais je trouve assez catastrophique de faire autant de requette alors que je pense qu'il est possible d'en faire une.
 
pour en faire une je note:  
 
$sql = "UPDATE `subject` SET lang".$id_new_lang." = ${CONCAT(id,'_1')}";
 
où $id_new_lang est l'id de la nouvelle langue et id l'id des sujets.
 
CONCAT(id,'_1') et sencé me generer le nom de chaque variable de mon formulaire a associé avec chaque id de sujet.  
 
mais vu que c'est que le nom de la variable, et qu'il nous faut le contenu, je fais  
 
${CONCAT(id,'_1')} pour avoir le contenu de la variable qui a le nom donné par la chaine de caratere genere par la partie entre acolade. ( systeme des variable dynamique)
 
le problème est que CONCAT(id,'_1') c'est du language mySQL et le coup des variable dynamique c'est du php, resultat ca ne marche pas:
 
en effet la chaine $sql est évalué une seule fois avant d'etre passé à mysql_query().
 
si je mets mes variables dans un tableau pour faire un truc du genre  
 
$sql = "UPDATE `subject` SET lang".$id_new_lang." = ".tab[id]."";
 
ca ne marche pas non plus pour les memes raisons.
 
il me faudrait donc un systeme de variable dynamique en mySQL en ayant accé au variable php, et ca je ne sais pas si ca existe.
 
Donc si vous connaisez ou si vous trouvez une autre methode pour faire la requette en une fois (quite a refaire le formulaire), je suis prenneur
 
merci ;)

n°514550
mrbebert
Posté le 14-09-2003 à 20:36:11  profilanswer
 

non, tu ne peux pas demander à ton serveur mysql de traiter les variables PHP.
T'es obligé de faire autant de requêtes qu'il y a de lignes [:proy]

n°514555
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 20:40:14  profilanswer
 

meme en generant une longue ligne en php comme quand on fait  
 
 
udpate toto set toto=2, tel = 055654641 etc...
 
je viens d'avoir l'idée, je peux pas mettre plusieur clause Where, avec une clause par upadate ?
 
remarque si c'est posible au niveau de l'acés a la base, ca revient un peu au meme...  
 
tant pis merci quand meme! ;)

n°514577
mrbebert
Posté le 14-09-2003 à 21:04:00  profilanswer
 

non
dans un UPDATE, chaque ligne est indépendante des autres [:proy]  
 
Il est parfois possible de "bricoler" quelques chose, du genre :
UPDATE table SET value = 4*(id=2) + 6*(id=3) WHERE id=2 OR id=3
 
Ca met value à 4 lorsque id=2, et value à 6 lorsque id=3
On joue sur le fait que (id=2) vaut 1 si id est égal à 2, 0 sinon.

n°514613
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 22:39:44  profilanswer
 

ok je te remercie.
 
 
mais pour quelque chose de propre, vu que comme tu l'as fais remarquer c'est du bricolage, vaut mieux que je fasse une boucle for?

n°514616
mrbebert
Posté le 14-09-2003 à 22:44:58  profilanswer
 

Je vois pas d'autre moyen [:proy]

mood
Publicité
Posté le 14-09-2003 à 22:44:58  profilanswer
 

n°514621
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 22:52:01  profilanswer
 

oui mais ce que je veux dire, tu penses qu'il vaut mieux faire ce bidouillage ou faire une boucle for, pour ce qui est du temps de traitement? car j'ai deja pas mal de requette dans la page http://urgeman.free.fr/img/smiley/mlc.gif

n°514627
mrbebert
Posté le 14-09-2003 à 22:57:58  profilanswer
 

C'est plus simple de faire une boucle for. De toute façon, ce n'est pas une page qui est utilisée fréquemment.

n°514631
naeco
Buddy Rich Big Band
Posté le 14-09-2003 à 22:59:13  profilanswer
 

bonne remarque, merci  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  update spécial, variable dynamique et mysql

 

Sujets relatifs
update spécial, comment y arrivernom de variable acceptable ?
[RESOLU] HTML et variableFlash MX : comment récupérer variable ds animation swf?
[JAVA] Forum java/mysql propre[mysql] fonction OPTIMIZE
Crypter une base MySQLcopie de bases MySQL
[RESOLU] acces à un div dont le nom est dynamique 
Plus de sujets relatifs à : update spécial, variable dynamique et mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR