我想组合来自两个MySQL表的数据并使用PHP回显结果。第一个表称为TEST1,有两个字段(name,info1)。第二个表称为TEST2,还有两个字段(姓氏,info2)。我想选择名称和姓氏,其中info1 = info2并使用PHP在同一行中打印姓名和姓氏。我到目前为止编写的代码就是这样,但我不认为它对我希望它完成的两项任务完全正确。
$sql = "SELECT name, surname FROM TEST1, TEST2 WHERE info1 = info2";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo " - Name: " . $row["name"]. " - Surname: " . $row["surname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
例如,让我们说TEST1有名字,info1 [(John,112233),(Luke,112244),(Ariana,112255)]和TEST2有姓氏,info2 [(Lala,112255),(Zara) ,112233),(Azon,112267),(Esora,112248)]。所以我希望它在我访问网页时显示:
Name: John - Surname: Zara
Name: Ariana - Surname: Lala
或
Name: Ariana - Surname: Lala
Name: John - Surname: Zara
name,surname,info1,info2为VARCHAR(64)
。似乎有类似的排队,但它们并不容易理解,特别是对于那些无法理解更高级脚本的PHP和MySQL初学者而言,因为它们特定于提问者的问题。因此,为了帮助更多的人而不仅仅是我,我试图做到这一点。请你帮助我好吗?提前谢谢。
答案 0 :(得分:1)
首先,如果以这种方式存储的信息数据变得多余并且在数据库中占用更多空间。如果您有多个姓名和姓氏指向不同的人,您可以在另一个表中使用一个特定的姓名或姓氏,并在那里存储与该人相对应的信息。
Table1 = {tableOneId, firstName}
Table2 = {tableTwoId, lastName}
Table3 = {tableThreeId, tableOneId, tableTwoId, info}
通过这种方式,您可以一次只存储一次品种名称和姓氏,并且可以冗余地存储每个人的信息。现在加入这些表以获取所需信息。
Select * from `table1`
inner join `table3` on `table1`.`tableOneId` = `table3`.`tableOneId`
inner join `table2` on `table3`.`tableTwoId` = `table2`.`tableTwoId`
现在,您可以从结果集中选择姓名和姓氏。
答案 1 :(得分:0)
我会将“tableOneId”(或任何你喜欢的)作为外键添加到第二个表中,该表等于第一个表的Id - 这将使其成为主键。据我所知,这是关系数据库的基本原则。
结构:
Table1 = {Id, firstName, info}
Table2 = {Id, lastName, info, tableOneId}
假设firstName和lastName总是引用一个唯一的人,并且由于某种原因需要将此信息划分为两个不同的表,您可以实现此策略以在一个表中将唯一标识符作为Id并将tableOneId作为第二个,以选择两个表中一个人的唯一数据。
查询可能是这样的:
Select * from `table1`, `table2` where `table1`.`Id` = `table2`.`tableOneId`;