2009-11-26 4 views
0

J'ai une table appelée cms_page dans laquelle chaque page a un ID. Je veux tirer toutes les informations de cette table et toutes les informations de la table de cms_page_part où page_id est égal à l'ID i envoie à la page ... confondant je sais, mais voici ma tentative:PHP PDO MYSQL JOIN

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); 

Toute aide Déterminer comment les rejoindre serait apprécié.

Répondre

2

Comment joindre les deux 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 

Exemple de ce que je disais dans mes commentaires:

// 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(); 

Exemple (avec des déclarations préparées):

// 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(); 
} 
+0

didnt semblent fonctionner ... dois-je retirer cms_page_part. * – Andy

+0

toujours pas de joie désolé – Andy

+0

Pouvez-vous poster l'erreur SQL que vous obtenez? – William

0
$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'"); 
+1

-1, Ceci est ** pas ** PDO. – Johan

+5

@Johan c'est effectivement PDO, c'est juste pas écrit correctement. PDO a en effet une méthode appelée query. http://php.net/manual/en/pdo.query.php – Shaokan