2017-10-29 91 views
0

我有两个表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'])); 
     } 
     ?> 

请协助。

+1

究竟是什么问题?你有错误吗?错误的结果? – Mureinik

+0

@Mureinik错误的结果,我没有得到届满,只是一个空白栏,其余的作品我得到正确的数据,但需要从其他表到期 – Kilisi

回答

0

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

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

请注意,您可以从WHEREORDER BY和/或LIMIT,你通常会做追加SQL查询。

的对此的解释是以下:

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

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

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

如果您需要进一步澄清,不要犹豫,让我知道。

希望这会有所帮助。

+0

它的工作原理,但不显示过期,我的显示语法是否正确? – Kilisi

+1

若要显示获取结果中的任何字段,只需使用'$ myrow ['expiry']',其中'expiry'将被表中的字段名替换。试试这个并检查。 –