gpt4 book ai didi

mysql - 两个不同表之间的INSERT和UPDATE(+增加值)php mysql

转载 作者:行者123 更新时间:2023-11-28 23:48:11 25 4
gpt4 key购买 nike

tbl_A

[编号 |设施部分 | assigned_no]


tbl_B

[col1 |列2|发给 | col3 | col_etc]


下拉列表将检索 tbl_A 表的 facility_section 列的值。然后,下拉列表值将被插入到 tbl_Bissued_to 列中。代码示例:-

<?php

include ('dbconnect.php');

@$i=$_POST['issued_to'];

if(@$_POST['submit'])
{
$s="INSERT INTO tbl_B (issued_to) VALUES ('$i')";
mysql_query($s);
}

@$facility_section = $_POST['facility_section'];

$result = mysql_query("SELECT facility_section FROM tbl_A");

?>

<select name="issued_to">
<option selected disabled>-- Please Select --</option>
<?php
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['facility_section'] . "'>" . $row['facility_section'] . "</option>";
}
?>
</select>

我想要的是,每次将下拉列表值插入到 tbl_Bissued_to 列、assigned_no 列>tbl_A 将更新并增加 1,相应地增加:- facility_section=issued_to

我知道要更新的代码:-

更新 tbl_A
SET assigned_no = assigned_no + 1
WHERE facility_section = '$facility_section'

但是,我对如何执行此操作感到困惑...

最佳答案

我认为你的做法是错误的。数据库设计的一个基本原则是避免信息冗余(或被其他地方的其他信息复制)。如果相同的信息出现在两个或多个地方,那么它可能会不一致(每个地方都不同)。

首先,表B中的issued_to是表A的外键吗?它应该是。

现在,不要在表 A 中存储 assigned_no。如果有人更改了这个值而没有向表 B 添加新行怎么办?如果有人向表 A 插入数据,而没有更新相应的 assigned_no 会怎样。如果您假设 assigned_no 对应于表 B 中具有该 issued_to 的条目数,一旦这变得无效,您就有可能获得大量条目。

取而代之的是,像这样检索分配的数量

SELECT 
facility_section,
(SELECT COUNT(*) FROM tbl_B WHERE issued_to = 4551) AS assigned_no
FROM tbl_A
WHERE id = 4551

或者像这样一次性处理整个表格:

SELECT 
a.id,
a.facility_section,
COUNT(*)
FROM tbl_A AS a
INNER JOIN tbl_B AS b
ON a.id = b.issued_to
GROUP BY a.id, a.facility_section

关于mysql - 两个不同表之间的INSERT和UPDATE(+增加值)php mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com