2017-10-29 118 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'將被表中的字段名替換。試試這個並檢查。 –