如何创建原始帖子的链接,PHP

时间:2016-01-20 14:16:19

标签: php mysql

我有一个查询从数据库中返回帖子,查询按类别对帖子进行分组,标题是指向原始帖子的链接。返回的帖子显示在类别页面上。

麻烦的是,虽然按类别显示和分组帖子标题,但我发现每个类别的每个帖子只找到第一个post_id,并且我的链接只返回每个类别中ID最低的第一个帖子或帖子。该链接将您带到原始帖子。 原始帖子显示在名为“entries.php”的页面上

示例:

Post1 id = 1

Post2 id = 2

Post3 id = 3

上面的所有帖子都按类别分组,但如果我将鼠标悬停在它们上面,那么由于某种原因,它们都会提取Post1 id = 1。当我将鼠标悬停在它们上面时,我能做些什么来确保找到每个id? 谢谢你的时间!

查询:

$query = "SELECT category, GROUP_CONCAT(DISTINCT title SEPARATOR '<br />') titles, post_id
        FROM categories, posts
        WHERE categories.category_id = posts.category_id 
        GROUP BY category";

        $result = mysqli_query($dbc, $query)
            or die('Error querying database.');

        while ($row = mysqli_fetch_array($result)){
            echo "<h2>".$row['category']."</h2>";
            echo '<a href="entries.php?id='.$row['post_id'].'">'.$row['titles'].'</a>';
            echo "<hr />";
        }

2 个答案:

答案 0 :(得分:0)

你应该是GROUP BY post_id,也可以使用ORDER BY你排序。

答案 1 :(得分:0)

你很想念SQL的GROUPing概念。如果你对category_id上的GROUP行,你实际告诉MySQL的是什么:我想要每个category_id只有一行,无论存在多少行。在标准SQL中,只允许使用“GROUP BY category_id”时“SELECT category_id”(以及聚合函数,如COUNT,MAX,MIN等)。 MySQL允许你多一点,任意选择一个命中(它找到的第一个)。

你可能想要的是ORDER BY category_id,然后在你的php脚本中进行分组,如

$prev_cat_id = null;
while ($row = mysqli_fetch_array($result)) {
    if ($prev_cat_id != $row['category_id']) {
        do stuff for next category
    } else {
        do stuff for next post in same category
    }
}
remember to do cleanup for last category