2013-02-10 120 views
1

这更多的是一个理论问题。我有一个包含各种文本框,下拉框等的页面。每个用户都有他/她的“自己的页面”,可以通过我所指的更新页面进行更新。他选择更新字段。它传递大约30个变量(如果每个字段都被输入)到一个“预览页面”。如果用户喜欢预览页面,那么他们点击预览页面底部的“更新”按钮,并将所有各种变量更新到适当的MySQL表格中,其他人看到的“自己的页面”会动态更新。 (让我知道这个解释是否不清楚)。动态选择MySQL更新

第一次插入此信息很容易。但是,当用户稍后只想更新其页面的几个字段时,这就是我感到困惑的地方。如何使MySQL更新查询动态地识别用户想要更新的页面上的字段的更新(当他将其他字段留空时,这些列的旧信息保持不变,并且它们被忽略更新查询)。

让我知道,如果我问的没有意义,我会再试一次。

感谢您的帮助。

+1

...请检查该字段为空,如果是这样,不更新呢?编码问题究竟在哪里? – 2013-02-10 05:06:28

+0

也许我的问题是,有没有人知道一个很好的脚本,通过变量循环发现哪些是空的,哪些不是?如果只有少数,这不会是一个问题。即使我知道这一点,mysql更新查询需要更新列名和相关变量。动态更新列名以及插入适当的变量进行更新(不会留空)也会让我感到困惑。 – 2013-02-10 05:11:21

+0

当用户发布更新并进行比较时,您再次从数据库中选择页面,为您决定要更新的内容。或者你只是更新很多。那有什么害处? – Popnoodles 2013-02-10 05:18:48

回答

0

最简单的方式做这将是

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

COALESCE将返回第一个非空值(或null如果所有值都为空)。

请注意,如果您要强制使用默认值,则可以在现有字段值后插入默认值。
像这样:

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

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