我正在使用从数据库中读取页面的代码。它运行在PDO,PHP上。无论如何,我想知道我怎么做它所以它从两个表读取?好像例如,在当前它运行'pages'但我可以让它也从'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;
?>
答案 0 :(得分: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是您为检索的字段设置的别名,因为这两个表可能具有不同的字段名称。