从表单的Sql表关系

时间:2013-11-01 17:53:55

标签: php mysql

我有一个表格,收集有关在联系簿中使用的人的信息。我需要创建两个表。一个用于大多数数据,另一个用于电话号码,因为每个人可以拥有多个电话号码。显然我希望这些表是可关联的,但我不明白如何将表单中的数据输入到两个表中,以便它们共享关系。我还需要能够将数据加入主表中的单个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 }

2 个答案:

答案 0 :(得分: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不允许你在组中使用只有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?