根据相同的值

时间:2017-10-29 08:45:33

标签: php postgresql

我有两个表,每个表有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和数字是相同的。所以我需要查询从一个表中查找数据,然后从另一个表中获取到期日期: -

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']));
        } 
        ?> 

请协助。

1 个答案:

答案 0 :(得分:0)

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

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

请注意,您可以像往常一样附加WHERE以及ORDER BY和/或LIMIT的SQL查询。

对此的说明如下:

首先你有SELECT。之后你有People.*,这意味着所有来自表人。所以你写表名和.和字段(*为全部)。在此之后添加一个comman ,,然后使用相同的语法添加下一个表。在您的情况下,它是Dates.*。然后添加FROM第一个表名。在此之后,您添加INNER JOIN和第二个表名称。之后,您可以通过ON定义两个表之间的引用,然后定义两个表People.id_number = Dates.number中的字段。语法相同,Table.Field

现在您可以正常显示结果。

请注意,我已经为您提供了可以在代码中插入的SQL查询。它可能是PDO或准备好的声明。

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

希望这有帮助。