【问题标题】:Combine data from two MySQL tables and echo results using PHP使用 PHP 组合来自两个 MySQL 表的数据并回显结果
【发布时间】:2015-05-24 03:45:31
【问题描述】:

我想合并来自两个 MySQL 表的数据并使用 PHP 回显结果。第一个表称为 TEST1,有两个字段(名称、信息 1)。第二个表称为 TEST2,也有两个字段(姓氏、信息 2)。我想选择姓名和姓氏,其中 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

姓名、姓氏、info1、info2 是VARCHAR(64)。似乎有类似的问题,但它们并不容易理解,特别是对于那些无法理解更高级脚本的 PHP 和 MySQL 初学者来说,因为它们是针对提问者的问题的。所以我试着做一般性的事情,以帮助更多的人,而不仅仅是我。请你帮助我好吗?提前致谢。

【问题讨论】:

  • 最好将Id字段添加到一个表中作为主键并添加到第二个表中作为外键。假设 Name 和 Surname 始终属于一个人,并且出于某种原因将它们分成两个不同的表。 @Vaggelis

标签: php mysql select relational-database echo


【解决方案1】:

首先,如果以这种方式存储信息数据,则会变得多余并占用数据库中的更多空间。如果您有多个姓名和姓氏指向不同的人,您只需将一个特定的姓名和姓氏或其 id 放在不同的表中,并将与该人对应的信息存储在那里。

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`

现在您可以按照自己的方式从结果集中选择姓名和姓氏。

【讨论】:

  • join点赞。 @Oluderi 这回答了你的问题吗?
【解决方案2】:

我会将“tableOneId”(或您喜欢的任何内容)作为外键添加到等于第一个表的 Id 的第二个表中 - 这将使其成为主键。据我了解,这是关系数据库的基本原理。

所以结构:

Table1 = {Id, firstName, info}
Table2 = {Id, lastName, info, tableOneId}

假设 firstName 和 lastName 总是指一个唯一的人,并且由于某种原因您需要将此信息划分到两个不同的表中,您可以实施此策略以将唯一标识符作为一个表中的 Id 和 tableOneId 到第二个,以选择两个表中一个人的唯一数据。

查询可能是这样的:

Select * from `table1`, `table2` where `table1`.`Id` = `table2`.`tableOneId`;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多