0

我有一个表格,用于收集要在通讯录中使用的人的信息。我需要创建两个表。一个用于大部分数据,另一个用于电话号码,因为每个人都可以有多个电话号码。显然我希望这些表是相关的,但我不明白如何将表单中的数据输入到两个表中,以便它们共享关系。我还需要能够将数据连接到主表中的单个电话号码列中。

这个想法是这样说明的:


(来源:gyazo.com

使用 tableA_id 填充电话号码字段。我如何从表单中输入数据才能做到这一点?

更新代码

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 }
4

2 回答 2

1

要插入数据,您需要在 php 中循环执行,看起来像(伪代码):

单身的insert into tableA (firstname, lastname, address, email)

获取最后插入的 id ( mysql_insert_idmysqli_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 不允许您在 group by 中使用只有 a.id 的 a.*,您需要这样做:

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
于 2013-11-01T18:11:03.520 回答
0

为大多数数据添加一个主键(例如,“id”)到您的第一个表。电话号码数据的第二个表应该具有第一个表中主键的索引字段。

然后,您需要先将非电话号码数据插入此表中。然后使用 SELECT LAST_INSERT_ID() 获取此插入的主键并将其添加到您的插入到第二个表中。这样,phonenumber 表中的所有条目都将具有一个索引字段,该字段指向第一个表中的用户。

这个 stackoverflow 线程对使用 LAST_INSERT_ID() 进行了很好的讨论:

Get the new record primary key ID from mysql insert query?

于 2013-11-01T18:06:54.737 回答