【问题标题】:PHP PDO MYSQL JOINPHP PDO MYSQL 连接
【发布时间】:2009-11-26 21:19:31
【问题描述】:

我有一个名为 cms_page 的表,其中每个页面都有一个 ID。我想从该表中提取所有信息,并从 cms_page_part 表中提取所有信息,其中 page_id 等于我发送到页面的 ID...我知道很困惑,但这是我的尝试:

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

任何帮助弄清楚如何加入这些将不胜感激。

【问题讨论】:

    标签: php mysql join pdo


    【解决方案1】:

    如何联接两个表:

    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
    

    我在 cmets 中所说的示例:

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

    示例(带有准备好的语句):

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

    【讨论】:

    • 我删掉的那个给我带来了很好的标题,但是错误在我的页面上被抑制了,我不知道如何重新打开它们:(
    • 所以我做对了,两个表都有一个名为 page_id 的字段,对吗?并且您正在测试的页面 ID 在两个表中都有具有相同 page_id 的行?
    • 不抱歉...在 cms_page 中是它的“id”,在 cms_page_part 中是它的“page_id”
    • 我刚刚更新了我的原始帖子。这有效:@) 但我还有另一个问题。在 cms_page_part 中存在具有相同页面 ID 的不同“部分”。你知道我如何具体访问每一个吗?感谢您的帮助。
    • Johan:我用 PDO 示例更新了答案。我还添加了一个准备好的语句,因为我觉得你对 PDO 和准备好的语句感到困惑。
    【解决方案2】:
    $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'");
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-02-07
    • 2021-10-16
    相关资源
    最近更新 更多