2013-02-10 8 views
1

Il s'agit davantage d'une question théorique. J'ai une page avec un tas de différents champs de texte, des listes déroulantes, etc. Chaque utilisateur a sa propre page qui peut être mise à jour via cette page de mise à jour à laquelle je fais référence. Il met à jour les champs à son choix. Il passe environ 30 variables (si chaque champ est entré) à une "page d'aperçu". Si la personne aime la page d'aperçu, elle clique sur un bouton "mise à jour" en bas de la page d'aperçu et toutes les variables sont mises à jour dans la table MySQL appropriée et leur propre page est mise à jour dynamiquement. (laissez-moi savoir si cette explication n'est pas claire).Sélection dynamique des mises à jour MySQL

L'insertion de cette information pour la première fois est facile. Cependant, quand un utilisateur veut mettre à jour seulement quelques-uns des champs pour sa page plus tard, c'est là que je suis confus. Comment rendre la requête de mise à jour MySQL dynamique pour reconnaître une mise à jour SEULEMENT les champs de la page que l'utilisateur veut mettre à jour (alors qu'il laisse les autres champs vides, laissant ainsi l'ancienne information intacte pour ces colonnes, et ils sont ignorés la requête de mise à jour). Faites-moi savoir si ce que je demande n'a pas de sens et je vais essayer à nouveau.

Merci pour votre aide.

+1

... vérifier si le champ est vide, et si oui, mettez à jour pas? Où est exactement le problème de codage? –

+0

Peut-être que ma question est, est-ce que quelqu'un connaît un bon script qui parcourt les variables pour découvrir celles qui sont vides et celles qui ne le sont pas? Si ce n'était que quelques-uns, ce ne serait pas un problème. Même une fois que je le sais, la requête de mise à jour mysql nécessite à la fois le nom de la colonne à mettre à jour et la variable associée. La mise à jour dynamique du nom de la colonne avec l'insertion des variables correctes à mettre à jour (qui ne sont pas laissées vides) est quelque chose qui me déconcerte aussi. –

+0

Vous sélectionnez à nouveau la page de la base de données lorsque l'utilisateur publie sa mise à jour et la compare, ce qui vous permet de décider de la mise à jour. Ou vous venez de mettre à jour le lot. Quel est le mal là-dedans? – Popnoodles

Répondre

0

La meilleure façon de le faire serait

UPDATE MyTable m SET m.f1 = COALESCE(input1,m.f1), m.f2 = COALESCE(input2,m.f2), .... 
WHERE m.id = key; 

Le COALESCE retourne la première valeur non nulle (ou null si toutes les valeurs sont nulles).

Notez que vous pouvez insérer une valeur par défaut après la valeur de champ existante si vous souhaitez forcer une valeur par défaut.
Comme si:

UPDATE MyTable m SET m.f1 = COALESCE(input1,m.f1,default1), m.f2 = COALESCE(input2,m.f2,default2), .... 
WHERE m.id = key; 

Voir: MySQL: how to use COALESCE
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

Questions connexes