在mysql Update Query中查找受影响的字段

时间:2011-07-29 15:14:23

标签: mysql

我在这里有一个复杂的问题,假设我在一个表中有5个字段,而我的一个用户在运行mysql更新查询的表单的帮助下仅更新了2个。

那么有什么方法可以找出哪两个字段已被更改

3 个答案:

答案 0 :(得分:2)

嗯,我不确定这是不是最好的方法,但它会起作用。请注意,语法适用于tsql(SYBASE),但您可以理解。

1)更新记录之前:使用与UPDATE查询相同的WHERE子句。请注意,“新值”是您要更新的内容,如果字段未更新,则只发送旧值。这将告诉您将由UPDATE查询更新的文件。

SELECT CASE WHEN field1 <> 'new value' THEN 'field 1' ELSE '' END,
CASE WHEN field2 <> 'new value' THEN 'field 2' ELSE '' END,
CASE WHEN field3 <> 'new value' THEN 'field 3' ELSE '' END,
CASE WHEN field4 <> 'new value' THEN 'field 4' ELSE '' END,
CASE WHEN field5 <> 'new value' THEN 'field 5' ELSE '' END
FROM table_name t
WHERE t.field1 = "old value"

2)更新记录后:使用与UPDATE查询相同的WHERE子句。请注意,“旧值”是更新之前的值。如果记录的键可以通过UPDATE更改,则可能必须相应地更新WHERE子句。这将为您提供UPDATE已更改的字段。

SELECT CASE WHEN field1 <> 'old value' THEN 'field 1' ELSE '' END,
CASE WHEN field2 <> 'old value' THEN 'field 2' ELSE '' END,
CASE WHEN field3 <> 'old value' THEN 'field 3' ELSE '' END,
CASE WHEN field4 <> 'old value' THEN 'field 4' ELSE '' END,
CASE WHEN field5 <> 'old value' THEN 'field 5' ELSE '' END
FROM table_name t
WHERE t.field1 = "old value"

答案 1 :(得分:0)

你可以通过几种方式做到这一点。可能绝对最简单的方法是在表单上隐藏具有原始值的字段。然后在提交时,您可以将新值与原始值进行比较。

答案 2 :(得分:0)

我自己是初学者,但从这里(字面意思)拉出一些东西,在那里,我想出了一些对我有用的东西。

这是PHP / Database员工目录。当我想编辑现有员工时,我正在使用预先填充了现有数据库信息的表单。

提交表单时,在运行UPDATE查询之前,我想获取已更改的字段的名称,以便将其添加到编辑日志中。

同样,我需要重申一下,我是初学者。毫无疑问,实现这一目标的方法更短/更简单。你已被警告:)

//Create array to use later in identifying the changed fields and set each to 0
$update = array('Firstname' => 0,
                'Lastname' => 0,
                'Extension' => 0);

//Set incoming POST data to variables
if (isset($_POST['e_fn'], $_POST['e_ln'], $_POST['e_ext'])) {
    $e_fn = $_POST['e_fn'];
    $e_ln = $_POST['e_ln'];
    $e_ext = $_POST['e_ext'];
}

//grab existing employee data with existing function
$thisEmp = $employee->fetch_emp($e_id);

//set old data to $old_*
    $old_fn = $thisEmp['firstname'];
    $old_ln = $thisEmp['lastname'];
    $old_ext = $thisEmp['extension'];

//compare $old_* to each field sent in POST and flip switch for changed fields
    if ($old_fn !== $e_fn) {$update['Firstname'] = 1;}
    if ($old_ls !== $e_ls) {$update['Lastname'] = 1;}
    if ($old_ext !== $e_ext) {$update['Extension'] = 1;}

//get the key value for each element with the switch == 1
    foreach ($update as $key => $value) {
        if ($value == 1) {
            $wasaffected .= $key . ', ';
        }
    }

现在您已获得更改了哪些字段的名称 好吧,它实际上并不是字段的名称,而是字段的名称 键的名称,但如果需要,可以将它们命名为。

echo $wasaffected; //--> Firstname, Extension,