如果我插入行,并且我想更新插入此立即进程的行的一个列值,而不更新此前一个进程中插入的旧行的一个列值 你可以看到我的代码并更清楚地理解:
<?php
session_start(); ?>
<form action="" method="post" name="data_table">
<tbody >
<?php
require_once("dbconfig.php");
error_reporting(0);
$id=$_POST['id'];
$class=$_POST['class'];
$d = new DateTime('now', new DateTimeZone('Asia/Baghdad'));
$date=$d->format('Y-m-d H:i:s');
$q="select * from students WHERE class='$class'";
$qq=mysql_query($q)
or die(mysql_error());
echo "<table border='2'>
<tr>
<th>الأسم</th>
<th>الحضور</th>
</tr><tr>";
while($row=mysql_fetch_array($qq)){
?>
<input type="hidden" name="class" value="<?php echo $row['class']; ?>" >
<td><input type="checkbox" value="<?php echo $row['id']; ?>" name="id[]" ></td>
<td><b><?php echo $row['username']; ?></td>
<tr>
<?php } ?>
</table>
<?php if (isset($_POST['submit']))
{if(empty($id) || $id==0)
{ echo " please check ";
}
else
{
$impid=implode(", ",$id);
$qdel=mysql_query("INSERT INTO attendees SELECT * FROM `students` WHERE class='$class'");
$qdel=mysql_query("UPDATE attendees set datetime='$date'");
if (isset($qdel)){
echo "<h2> done </h2>";}
}
} ?>
</tbody>
</form>
问题是更新查询更新了现在和之前插入的所有行中的datetime列的值所以我的问题是如何使更新查询与每个插入过程分开工作 有人可以帮忙吗?感谢
答案 0 :(得分:0)
插入后立即执行更新效率低下。依靠两个不同表的列来始终匹配也不是一个好主意。
您可以在查询中插入静态字符串。
INSERT INTO attendees (column1, column2, column3, datetime)
SELECT column1, column2, column3, '$date' FROM students WHERE class='$class'
然而,这打破了RDBMS的标准化标准。执行此操作的最佳方法不是重复数据到与会者,而是在与会者中引用学生ID的外键。您不必更新两个表来更新学生的信息。我建议你在设计数据库之前先阅读数据库规范化。