提问者:小点点

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


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

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

示例:

Post1 id=1

post2id=2

后置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个答案

匿名用户

你应该GROUP BYpost_id,也可以使用ORDER BY yo排序。

匿名用户

您误解了SQL的分组概念。如果您在category_id上分组行,那么您实际上告诉MySQL的是:我希望每个category_id只对应一行,而不管存在多少行。在标准SQL中,当使用“按类别分组id”时,只允许“选择类别id”(以及聚合函数,如COUNT、MAX、MIN等)。MySQL允许您多选择一次点击(找到的第一次)。

您可能需要按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