【问题标题】:Return data from two tables based on identical value根据相同的值从两个表中返回数据
【发布时间】:2018-04-10 10:26:12
【问题描述】:

我有两张表,每张有 3 列

id_number / first_name / last_name / town

T1234     / James      / Smith     / Dant
T1235     / Peter      / Mantle    / Dant
T1236     / Milly      / Wong      / Mormer
T1237     / Susan      / Tan       / Dant

日期

number / id_reference / expiry

T1234  / Student id   / 24/12/2018
T1235  / Library Card / 23/07/2019
T1236  / Library Card / 16/07/2019
T1235  / Licence      / 02/03/2018

我正在尝试运行查询以有效地显示来自两者的数据但有问题。基本上我需要的是运行查询并使用两个表中的数据获得如下所示的答案,id_number 和 number 是相同的。所以我需要查询从一个表中查找数据,然后从另一个表中获取到期日期:-

id_number / last_name / expiry

T1234     / Smith     / 24/12/2018
T1235     / Mantle    / 23/07/2019
T1237     / Tan       / 02/03/2018

<?php

        $dbconn = pg_connect("host=127.0.0.1 dbname=sammy_nt user=sammy_nt password=******) or die('Could not connect: ' . pg_last_error());
    $town = pg_escape_string($_POST['town']);
        $query = "SELECT * FROM People p, Dates d
            WHERE p.id_number=d.number
            AND p.town='$town'
            ORDER BY p.id_number";

        $result = pg_query($query); 
        if (!$result) { 
            echo "Problem with query " . $query . "<br/>"; 
            echo pg_last_error(); 
            exit(); 
        } 

        while($myrow = pg_fetch_assoc($result)) { 
            printf ("<tr><td>%s</td><td>%s</td><td>%s</td></tr>", $myrow['id_number'], htmlspecialchars($myrow['last_name']), htmlspecialchars($myrow['expiry']));
        } 
        ?> 

请帮忙。

【问题讨论】:

  • 到底是什么问题?你有错误吗?错误的结果?
  • @Mureinik 错误的结果,我没有得到过期,只是一个空白列,其余的工作我得到了正确的数据,但需要显示另一个表的过期

标签: php postgresql


【解决方案1】:

在您的情况下,您有 2 张桌子。 PeopleDates 要从中获取数据。您可以将以下 SQL 查询与 INNER JOIN 一起使用。

SELECT People.*, Dates.* FROM People INNER JOIN Dates ON People.id_number = Dates.number"

请注意,您可以像往常一样从WHEREORDER BY 和/或LIMIT 附加SQL 查询。

解释如下:

首先你有SELECT。之后你有People.*,这意味着All from table People。所以你写表名和. 和字段(* for All)。在此之后添加一个命令,,然后使用相同的语法添加下一个表。在您的情况下,它是Dates.*。然后添加FROM First Table Name。在此之后添加INNER JOIN 和第二个表名。在此之后,您通过ON 定义两个表之间的引用,然后定义两个表中的字段People.id_number = Dates.number。语法相同,Table.Field

现在您可以简单地正常显示结果了。

请注意,我已经为您提供了可以插入代码中的 SQL 查询。它可能是 PDO 或 Prepared Statement。

如果您需要进一步说明,请随时告诉我。

希望这会有所帮助。

【讨论】:

  • 有效,但不显示过期时间,我的显示语法正确吗?
  • 要显示提取结果中的任何字段,只需使用$myrow['expiry'],其中expiry 将替换为表中的字段名称。试试这个并检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多