1

我正在使用从数据库中读取页面的代码。它在 PDO、PHP 上运行。无论如何,我想知道如何让它从两个表中读取?就好像例如,在当前它运行“页面”但我可以让它也从“pages_default”中读取页面。我的意思不是因为它只显示在两个表中都有两个名称的页面,而是显示具有相似字段的单独表..

<?php


if (isset($_GET['p']))
{
    $stmt = $dbh->prepare('SELECT * FROM pages WHERE shortname = :p');
    if (!$stmt->execute(array(':p' => $_GET['p'])))
    {//
        exit('Could not exec query with param: '.$_GET['p']);
    }
    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        echo '<font size="6pt">'.$row["title"].'</font><div class="hr"><hr /></div><br>';
        echo '   '.$row["content"].' ';
    }
}
//disconnect:
$dbh = null;
    ?>
4

1 回答 1

1

希望我已理解您的问题,我假设您想要运行一个查询并从两个具有不同名称和字段的表中检索行。

您在查询中使用 UNION 运算符,从两个表中获取行,然后将它们统一到一个表中。您必须从每个表中获取相同数量和类型的字段,并为您获取的每个字段提供相同的别名。

假设您有表 t1 和 t2,并希望从每个表中获取 3 个相似的字段,每个表具有相同的条件(您的短名称 =:p)。

SELECT <field1>, <field2>, <field3> FROM ((SELECT <t1field1> AS <field1>, <t1field2> AS <field2>, <t1field3> AS <field3> 
FROM t1 WHERE <t1field2>=:p) UNION (SELECT <t2field1> AS <field1>, <t2field2> AS <field2>, <t2field3> AS <field3> FROM t2 WHERE <t2field2>=:p)) AS A

field1,field2,field3 是您为检索的字段设置的别名,因为这两个表可能具有不同的字段名称。

于 2013-11-07T13:15:35.613 回答