我有一个查询,它从数据库返回帖子,查询按类别分组文章,标题是指向原始帖子的链接。返回的帖子显示在类别页面上。
问题是,当显示文章标题并按类别分组时,我发现每个类别的帖子只有第一个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 />";
}发布于 2016-01-20 14:22:33
您应该按post_id分组,也可以按You使用ORDER。
发布于 2016-01-20 14:27:57
您了解了SQL的GROUPing概念。如果您对category_id上的行进行分组,那么您实际上要告诉MySQL的是:无论存在多少行,我都希望每个category_id准确地排一行。在标准SQL中,只有在使用“Groupbycategory_id”时才允许“选择category_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 categoryhttps://stackoverflow.com/questions/34902448
复制相似问题