单个文章的多个类别(PHP MYSQL)

时间:2014-06-24 08:16:42

标签: php mysql tags categories article

需要帮助显示单篇文章的所有类别。

这是我的数据库结构:

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个单独的类别名称,但我非常希望它能够按顺序显示链接到该帖子的所有类别。我只是不能把头包裹起来,不知道输入什么我还是一个初学者。无论如何,谢谢你的时间!

2 个答案:

答案 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']

进行回音