我有一个从数据库返回帖子的查询,该查询按类别对帖子进行分组,标题是指向原始帖子的链接。返回的帖子显示在类别页面上。
麻烦的是,虽然职位标题显示并按类别分组,但我发现每个类别中的每个职位只有第一个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 />";
}
你应该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