[英]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.