php - 使用 WHERE 语句在循环中 INSERT INTO 表(以填充外键列)

标签 php mysql

我正在尝试为学校项目创建数据库,并且必须使用多个外键。我已经添加了原始数据,我想知道如何动态填充外键列。

例如,我有一个city 表和一个country 表。 city 表有一个 country_id 列,其中包含 country 表中右侧条目的 id

目前,表city 具有以下列:

id,

名称

code(例如“USA”表示美国和国家/地区具有相同的信息,我正在考虑将其用作 WHERE 语句的标识符)

country_id

我是 mySql 的初学者,现在感觉完全迷失了!

感谢您的帮助

最佳答案

在标准化之前,可以使用平面文件来描述城市和州数据:

id city       code country
 1 Amsterdam  NED  Netherlands
 2 Anvers     BEL  Belgium
 3 Athènes    GRE  Greece
 4 Atlanta    USA  United States
 5 Barcelone  ESP  Spain

对于此数据,无需再进行标准化。事实上,这会适得其反。

但是,如果您想存储有关国家/地区的信息,并且不想在每个城市的记录中重复,该怎么办?也就是说,你想保持人口规模、犯罪率、货币名称……等等。您不希望将这些信息与引用该国家/地区的每条记录一起存储;这会产生大量重复信息,如果您想更新国家/地区的数据,则必须在包含该国家/地区城市的每条记录中进行更改。

这就是外键概念发挥作用的地方。您可以将其分为两个不同的表:城市和国家/地区。特定于城市的信息(城市名称等)进入城市表,特定于国家的信息(国家人口、货币名称等)进入国家表。

但是现在,我们如何填充表格?

在基于 Web 的环境中,通常您会有一个数据输入页面,其中包含城市名称的输入,以及国家/地区的下拉框(或 AJAX 查找),其值为该国家/地区的 ID姓名。这样,当您提交城市和国家对时,您就可以将国家/地区 ID 与城市名称一起插入。

但在本例中,您已经填充了城市和国家/地区表。为了使用国家/地区 ID 更新城市表,您必须能够连接这些表。幸运的是,国家代码中有这样一个字段。这是一个令人高兴的意外,因为这实际上是不应该出现在城市表中的重复信息...更不用说依赖 varchar 字段来连接确实不是一个好主意(很难保证值是相同的) )

但既然它已经存在,我们就使用它吧!

首先,如何连接表?你加入他们,进入他们共同的领域。

给定:

City:
id  name      code  country_id 
 1 Amsterdam  NED 
 2 Anvers     BEL 
 3 Athènes    GRE 
 4 Atlanta    USA 
 5 Barcelone  ESP 


 Country
 id  name       code 
  1 Afghanistan AFG 
  2 Albanie     ALB 
  3 Algérie     ALG 
  4 Andorre     AND 
  5 Angola      ANG 
  ...
  20 Belgium    BEL
  ...
  30 Netherlands NED
SELECT CITY.*, COUNTRY.*
FROM CITY
INNER JOIN COUNTRY ON CITY.CODE = COUNTRY.CODE

结果(只有两个与我显示的结果集匹配):

 1 Amsterdam  NED null 30 Netherlands NED
 2 Anvers     BEL null 20 Belgium     BEL  

现在您可以连接两个表,您可以根据该数据更新城市表。 MySql 有自己的方法来做到这一点:

UPDATE CITY
INNER JOIN COUNTRY ON CITY.CODE=COUNTRY.CODE
SET CITY.COUNTRY_ID = COUNTRY.ID

(参见 MySQL - UPDATE query based on SELECT Query )

关于php - 使用 WHERE 语句在循环中 INSERT INTO 表(以填充外键列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883041/

相关文章:

jquery - 将值插入隐藏和数据库问题?

PHP - HTML 输入字符串在 MySQL 中存储为转义序列字符串

php - 删除成员(member)数据库中注册的成员(member)

php - 通过 php 将数组参数插入 mysql

php - var_dump() 不适用于 gRPC Protobuf 类的实例

php - MySQL/PHP 查询 - 检查输入的开始/结束日期是否与 Db 中的现有日期范围重叠

mysql - 为 Prestashop 1.6 优化 MySQL

php - 嵌套 Mysql 表

PHP - 无法从 HTML 表单提交访问 POST 值

php - 如何为动态生成的字段创建规则