繁体   English   中英

如何从两个表中查询匹配表中的外键和另一个表中的主键

[英]How do I query from two tables matching the foreign key from table with the primary key from another

我当前正在创建一个菜单项,并且在大多数情况下都可以,但是对于第二级子菜单(字母),提取的信息不正确。 我尝试了很多不同的联接,但要么只拉出我的一个子菜单项,要么全部拉出。 不知道此时我需要更改什么才能使其正常工作,也不确定如何更好地解释该问题。

至于我的桌子

menu :  columns id, name
people : id, people_name, href, menu_id
letters : id, letters_names, href, people_id

我的代码在这里:

<?php
    try{
        $pdo = new PDO("mysql:host=localhost;dbname=menu",'root','');
    } catch (PDOException $ex) {
        echo $ex->getMessag();
    }
    $sql = "SELECT * FROM menu ORDER BY id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta name="author" content="Kayla Lindstrom">
            <title>Lindstrom Letters</title>
           <!-- <link rel="stylesheet" type="text/css" href="style.css">-->
        </head>
        <body>
            <div id="page">
                <ul>
                    <?php while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
                        $sub_sql = "SELECT * FROM people WHERE menu_id=:id";
                        $sub_stmt = $pdo->prepare($sub_sql);
                        $sub_stmt->bindParam(':id', $row->id,PDO::PARAM_INT);
                        $sub_stmt->execute(); 
                        ?>

                    <li><a href=""><?php echo $row->name; ?></a>
                        <?php if($sub_stmt->rowCount()){ ?>

                        <ul>
                        <?php while($sub_row = $sub_stmt->fetch(PDO::FETCH_OBJ)) { 
                            $sub2_sql = "SELECT * FROM letters WHERE people_id=:id"; /*Here is where I am stuck.*/
                            $sub2_stmt = $pdo->prepare($sub2_sql);
                            $sub2_stmt->bindParam(':id', $row->id,PDO::PARAM_INT);/*and here*/
                            $sub2_stmt->execute(); ?>

                            <li><a href="<?php echo $sub_row->href; ?>"> 
                            <?php echo $sub_row->people_name;?></a>
                            <?php if($sub2_stmt->rowCount()){ ?>

                                <ul>
                                <?php while($sub2_row = $sub2_stmt->fetch(PDO::FETCH_OBJ)) { ?>
                                    <li><a href="<?php echo $sub2_row->href; ?>">
                                    <?php echo $sub2_row->letters_name;?></a></li>
                                <?php } ?>
                                </ul>

                            <?php } ?>
                            </li>
                        <?php } ?>
                        </ul>
                        <?php } ?>
                    </li>
                    <?php } ?>
                </ul>
            </div>
        </body>
    </html>

我想,您的做法是犯了一个错误,

代替这个:

$sub2_stmt->bindParam(':id', $row->id,PDO::PARAM_INT);/*and here*/

尝试:

$sub2_stmt->bindParam(':id', $sub_row->id,PDO::PARAM_INT);/*and here*/

它应该工作。 但是您可以通过内部联接来实现这一点,并且通过一个查询就可以联接所有表。 查询应类似于:

SELECT l.href, l.letters_name FROM menu m INNER JOIN people p ON m.id = p.menu_id INNER JOIN letters l ON l.people_id = p.id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM