Reputation: 3021
I have a table called cms_page in which each page has an ID. I want to pull all the information from this table and all the information from cms_page_part table where page_id is equal to the ID i send to the page...confusing i know but here is my attempt:
require '../../config.php';
$conn = new PDO(DB_DSN, DB_USER, DB_PASS);
$id = (int)$_GET['id'];
//$q = $conn->query("SELECT * FROM cms_page WHERE id=$id");
$q = $conn->query("SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* FROM cms_page LEFT JOIN cms_page_part ON cms_page_part.page_id=cms_page.id WHERE cms_page.id = $id");
$project = $q->fetch(PDO::FETCH_ASSOC);
Any help figuring out how to join these would be appreciated.
Upvotes: 0
Views: 9773
Reputation: 15583
How to JOIN the two tables:
SELECT id, title, slug, cms_page_part.* FROM cms_page JOIN cms_page_part ON cms_page.id = cms_page_part.page_id WHERE cms_page.id=$id
Example of what I said in my comments:
// Connect to database
$conn = new PDO(DB_DSN, DB_USER, DB_PASS);
// Page ID
$id = (int) $_GET['id'];
// Fetch page
$pageStmt = $conn->query(sprintf('SELECT * FROM cms_page WHERE id=%d', $id));
if ($pageStmt->fetchColumn() != 0) {
$page = $pageStmt->fetch(PDO::FETCH_ASSOC);
// Fetch parts
$partsStmt = $conn->query(sprintf('SELECT * FROM cms_page_parts WHERE page_id=%d', $id));
while ($part = $partsStmt->fetch(PDO::FETCH_ASSOC)) {
// ...
}
$partsStmt->closeCursor();
}
$pageStmt->closeCursor();
Example (with prepared statements):
// Connect to database
$conn = new PDO(DB_DSN, DB_USER, DB_PASS);
// Page ID
$id = (int) $_GET['id'];
// Fetch page
$pageStmt = $conn->query('SELECT * FROM cms_page WHERE id=:id');
if ($pageStmt->execute(array(':id' => $id))) {
if ($pageStmt->fetchColumn() != 0) {
$page = $pageStmt->fetch(PDO::FETCH_ASSOC);
// Fetch parts
$partsStmt = $conn->query('SELECT * FROM cms_page_parts WHERE page_id=:id');
if ($partsStmt->execute(array(':id' => $id))) {
while ($part = $partsStmt->fetch(PDO::FETCH_ASSOC)) {
// ...
}
$partsStmt->closeCursor();
}
}
$pageStmt->closeCursor();
}
Upvotes: 2
Reputation: 3021
$q = $conn->query("SELECT cms_page.id
, cms_page.title
, cms_page.slug
, cms_page_part.*
FROM cms_page
LEFT JOIN cms_page_part ON cms_page_part.page_id = cms_page.id
WHERE cms_page.id = '$id'");
Upvotes: 0