插入该特定值更改的记录

Posted

技术标签:

【中文标题】插入该特定值更改的记录【英文标题】:Insert that particular value changed record 【发布时间】:2015-05-03 18:46:58 【问题描述】:

从下面的代码中,如果显示 10 条记录,如果用户更改了第 2 条和第 5 条记录的 'Code' 或 'Number' 值,如何只插入第二和第五条记录在另一个单独的表中。但是从我的插入查询中,我可以插入所有 10 条记录。但我只需要插入两条受影响的记录。请帮忙。

include('DB.php');
$sql="SELECT * FROM customer where customer_name='".$q."' ";
$result = mysql_query($sql);
$num_row = mysql_num_rows($result);
$row_count=1;
if($num_row>0)
       
echo "<table >
<tr>
<th>S.No</th>
<th>Name</th>
<th>Code</th>
<th>Number</th>
</tr>";

while($row = mysql_fetch_array($result)) 
$c_name=$row['c_name'];
$c_code=$row['c_code'];
$c_number=$row['c_number'];

    echo "<tr>";
    echo "<td> $row_count.</td>";
    echo "<td><input type='text' name='c_name[]' id='c_name' value='$c_name' readonly /></td>";
    echo "<td><input type='text' name='c_code[]' id='c_code' value='$c_code' /></td>";
    echo "<td><input type='text' name='c_number[]' id='c_number' value='$c_number' /></td>";
    echo "</tr>";

    $row_count++;
             
echo "</table>";

插入:

$c_name=$_POST['c_name'];
$c_code=$_POST['c_code'];
$c_number=$_POST['c_number'];

if(isset($c_code))
                      
for($i=0;$i<count($c_code);$i++)


$insert=mysql_query("INSERT INTO customer_table2(name,code,number)
VALUES ('$c_name[$i]','$c_code[$i]','$c_number[$i]')");


【问题讨论】:

不要使用INSERT,使用UPDATE修改现有行。如果值相同,则不会产生任何影响。 没有。我需要在新旧记录的报告中显示,所以我有两个表。第一个表将有旧记录,第二个表 (customer_table2) 将只有更新的记录。 在插入之前,测试该行是否已经存在于旧表中。 如果我将它插入到不同的表中该怎么办? 在第一个表中做一个SELECT,看看它是否已经存在。如果没有,请将其添加到新表中。 【参考方案1】:

首先执行SELECT 查询,查看该行是否已经在原始表中。如果没有,请将其添加到新表中。

$c_name=$_POST['c_name'];
$c_code=$_POST['c_code'];
$c_number=$_POST['c_number'];

if(isset($c_code))
                      
    for($i=0;$i<count($c_code);$i++)
    
        // Prevent SQL injection
        $name = mysql_real_escape_string($c_name[$i]);
        $code = mysql_real_escape_string($c_code[$i]);
        $number = mysql_real_escape_string($c_number[$i]);
        $select = mysql_query("SELECT COUNT(*) AS c FROM customer WHERE name = '$name' AND code = '$code' AND number = '$number'");
        $row = mysql_fetch_assoc($select);
        if ($row['c'] == 0) 
            $insert=mysql_query("INSERT INTO customer_table2(name,code,number)
                                VALUES ('$name','$code','$number')");
        
    

【讨论】:

感谢您的样品。但这会插入所有记录。但我只需要插入第 2 和第 5 条记录,因为我更改了这两条记录中的值。 我不确定为什么会这样。如果您没有更改值,SELECT COUNT(*) 应该会找到现有行,因此COUNT(*) 将大于 0。 在用户提交表单之前是否从customer 表中删除了这些行? 我的代码中有一些混乱,我会尝试修复它。感谢您提供有用的示例。

以上是关于插入该特定值更改的记录的主要内容,如果未能解决你的问题,请参考以下文章

将新记录插入特定表时出现死锁

插入特定时间?

如何为特定的新主键记录插入默认值记录?

如果 Column_X 更新,PLSQL 触发器记录对审计表的更新

如何从 firebase 实时数据库中获取数据并更改一个文本字段以表示该特定记录?

SQL - 如果一条记录具有特定值,则仅获取该记录,否则获取全部