我在这里有一个复杂的问题,假设我在一个表中有5个字段,而我的一个用户在运行mysql更新查询的表单的帮助下仅更新了2个。
那么有什么方法可以找出哪两个字段已被更改
答案 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,