2017-05-25 157 views
0

我目前正在创建一个菜单项,并且大部分它工作正常,但所提取的信息对于二级子菜单是不正确的(字母)。我已经尝试了很多不同的连接,但只是拉我的一个子菜单项或全部。不确定我现在需要做些什么来改变它的工作方式,而不确定如何更好地解释这个问题。如何从两个表中匹配来自表的外键与另一个主键的查询

至于我

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> 

回答

0

在你的方法,你是做了一个错误,我想,

取而代之的是:

$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; 
+0

> _ <总是一次我偶然忽略的小事情。谢谢!有时候我只需要另一双眼睛就能看到我失踪的东西! – kll

相关问题