将MySQL数据库中两个表的数据与PHP PDO进行匹配并提取

时间:2017-08-13 13:08:34

标签: php mysql pdo

如何使用PHP循环基于MySQL数据库中两个表的匹配值提取数据?

在table_x上我有ZIPCODE列,在table_y上我有ZIPCODE和STREETCODE这样:

+-----+---------+  +---------+------------+
| id  | zipcode |  | zipcode | streetcode |
+---------------+  +---------+------------+
| 01  | 1234001 |  | 1111001 |     123    |
+---------------+  +---------+------------+
| 02  | 1234002 |  | 1234001 |     456    |
+---------------+  +---------+------------+
table_x            table_y

我想使用table_y中匹配的街道代码从table_x中提取每一行但我不确定要使用哪个join以及我是否应该用foreach替换while循环来实现我的目标。

$sql = 'SELECT * FROM table_x ORDER BY id';
    foreach ($db->query($sql) as $row) {                
        echo $row['zipcode'] . "<br>";
        // select from other table
    } 

最后,将每一行输出为包含街道代码的邮政编码..

2 个答案:

答案 0 :(得分:2)

如果关联的表具有相同的列名NATURAL JOIN并且列具有相同的数据类型,请使用zipcode

SELECT *
FROM table_x
NATURAL JOIN table_y

或在INNER JOIN

上使用zipcode
SELECT *
FROM table_x
INNER JOIN table_y
ON table_x.zipcode=table_y.zipcode

答案 1 :(得分:1)

您可以使用加入查询,

$dbh = new PDO('mysql:host=localhost;dbname=database', $user, $pass);
//replace table_x, y with your table names
$sql = "SELECT table_x.zipcode, table_y.streetcode
FROM table_x
INNER JOIN table_y ON table_x.zipcode=table_y.zipcode";
$stmt = $dbh->prepare($sql);
if ($stmt->execute()) {
    while ($row = $stmt->fetch()) {
        print_r($row);
    }
}