我有一个表格,收集有关在联系簿中使用的人的信息。我需要创建两个表。一个用于大多数数据,另一个用于电话号码,因为每个人可以拥有多个电话号码。显然我希望这些表是可关联的,但我不明白如何将表单中的数据输入到两个表中,以便它们共享关系。我还需要能够将数据加入主表中的单个phonenumbers列。
这个想法如下:
http://gyazo.com/792def4e3acb9b6b6767219b235fcb91.png
使用tableA_id填充phonenumbers字段。如何输入表格中的数据才能做到这一点?
更新了代码
11 //Form Validation
12 $name = $email = $gender = $comment = $website = "";
13
14 if ($_SERVER["REQUEST_METHOD"] == "POST")
15 {
16 $firstname = test_input($_POST["firstname"]);
17 $email = test_input($_POST["email"]);
18 $lastname = test_input($_POST["lastname"]);
19 $street = test_input($_POST["street"]);
20 $city = test_input($_POST["city"]);
21 $state = test_input($_POST["state"]);
22 $country = test_input($_POST["country"]);
23 $workphone = test_input($_POST["workphone"]);
24 $mobilephone = test_input($_POST["mobilephone"]);
25 $homephone = test_input($_POST["homephone"]);
26 $phonearray = array("$workphone","$mobilephone","$homephone");
27
28
29 }
30
31 function test_input($data)
32 {
33 $data = trim($data);
34 $data = stripslashes($data);
35 $data = htmlspecialchars($data);
36 return $data;
37 }
//After validation we input the data into the tables.
84
85 $sql="INSERT INTO nameaddress
86 (FirstName, LastName, Street, City, State, Country,email,photo)
87 VALUES
88 ('$firstname','$lastname','$street','$city','$state','$country','$email','$uploadfile')";
89
90
91
92
93
94 if (!mysqli_query($con,$sql))
95 {
96 die('Error: ' . mysqli_error($con));
97 }
98
99 $lastInsertId=mysqli_insert_id($con);
100 foreach ($phonearray as $a) {
101 $select="INSERT INTO userphones(phonenumbers,nameaddress_id)102
102 VALUES ($a,".$lastInsertId.")";
103 mysqli_query($con,$select);
104 }
答案 0 :(得分:1)
要插入需要在php中循环执行的数据,看起来像(伪代码):
单insert into tableA (firstname, lastname, address, email)
获取最后插入的ID(mysql_insert_id或mysqli_insert_id)
循环插入所有电话号码:foreach $phonenumber
insert into phones(phonenumber, lastidfrom insert into tableA)
对于输出,您需要使用group_concat,因此您的查询将如下所示:
select a.*, group_concat(b.phonenumbers)
from tableA as a
inner join
phones as b
on (a.id=b.tableA_id)
group by a.id
注意:具有严格模式的mysql不允许你在组中使用只有a.id的。*,你需要这样做:
select *
from tableA as a
inner join
(
select tableA_id, group_concat(phonenumbers)
from tableB
group by tableA_id
) as q
on (a.id=q.tableA_id)
group by a.id
答案 1 :(得分:0)
在大多数数据的第一个表中添加主键(例如“id”)。用于phonenumber数据的第二个表应该具有来自第一个表的主键的索引字段。
然后,您将首先将非phonenumber数据插入此表中。然后使用SELECT LAST_INSERT_ID()获取此插入的主键,并将其添加到插入到第二个表中。这样,phonenumber表中的所有条目都将具有索引字段,该字段指向第一个表中的用户。
这个stackoverflow线程有一个关于使用LAST_INSERT_ID()的很好的讨论:
Get the new record primary key ID from mysql insert query?