Множественный выбор из страниц
Я использую код, который читает страницы из базы данных. Работает на 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;
?>
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 - это псевдонимы, которые вы устанавливаете для полей, которые вы извлекаете, поскольку две таблицы могут иметь разные имена полей.