需要帮助显示单篇文章的所有类别。
这是我的数据库结构:
blog_posts 表
postID int,primary,auto increment。
postTitle varchar
postCont 文字
blog_categories 表
catID int,主要,自动增量。
catName varchar
blog_posts_categories 表
postID int
catID int
数据库内容:
blog_posts
postID | postTitle | postCont
1 Post1 Cont1
2 Post2 Cont2
3 Post3 Cont3
4 Post4 Cont4
5 Post5 Cont5
blog_categories
catID | catName
1 Music
2 Games
3 Technology
blog_posts_categories
postID | catID
1 1
1 2
1 3
2 2
3 3
4 1
4 2
5 2
5 3
这是我用来获取单个帖子的数据的代码。示例帖子页面网址如下所示:http://domain.com/viewpost.php?postID=1
<?php require('includes/config.php');
$stmt = $db->prepare(" SELECT *
FROM blog_posts
LEFT JOIN blog_posts_categories ON blog_posts.postID=blog_posts_categories.postID
INNER JOIN blog_categories ON blog_posts_categories.catID=blog_categories.catID
WHERE blog_posts.postID = :postID");
$stmt->execute(array(':postID' => $_GET['id']));
$row = $stmt->fetch();
//if post does not exists redirect user to homepage.
if($row['postID'] == ''){
header('Location: ./');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?php echo $row['postTitle'];?> | Website</title>
<link rel="stylesheet" href="style/normalize.css">
<link rel="stylesheet" href="style/main.css">
</head>
<body>
<div id="wrapper">
<h1>Single Post Page</h1>
<hr />
<p><a href="./">Home</a> | Categories: <?php echo ''.$row['catName'].''; ?></p>
<div>
<?php
echo '<h1>'.$row['postTitle'].'</h1>';
echo '<p>'.$row['postCont'].'</p>';
?>
</div>
</div>
</body>
</html>
现在这段代码只是echo的1个单独的类别名称,但我非常希望它能够按顺序显示链接到该帖子的所有类别。我只是不能把头包裹起来,不知道输入什么我还是一个初学者。无论如何,谢谢你的时间!
答案 0 :(得分:2)
如果您的查询返回多行,则必须循环查询此查询的结果以实现您想要的效果。
一个例子可以是:
while($row = $stmt->fetch())
{
// Your stuff here
}
如果你使用PDO,你可以使用fetchAll
而不是fetch
,你将获得一个数组而不是一行(但你总是需要循环)。
答案 1 :(得分:0)
这已经为您提供了理想的结果,但是多行。你只是取了第一个。所以你在结果中只有一个类别。
实现目标的一种方法是:
SELECT *, GROUP_CONCAT(catName) AS allCategories FROM ...
然后你只得到一个结果行。
使用$row['allCategories']
代替$row['catName']