每个类别从帖子中限制10条记录。

10 浏览
0 Comments

每个类别从帖子中限制10条记录。

我有两个表格categoriesposts,我不想为每个分类获取所有记录。我想要从每个分类中获取有限的行数。\ncategories表格如下:\n

    \n

  1. ID
  2. \n

  3. Name
  4. \n

  5. Slug
  6. \n

\nposts表格如下:\n

    \n

  1. ID [主键]
  2. \n

  3. 标题
  4. \n

  5. Slug
  6. \n

  7. 内容
  8. \n

  9. 分类 [键 - 外键]
  10. \n

  11. 发布日期
  12. \n

\n我想要做到的是,我想从posts中获取每个category的10条记录。\n我目前的做法非常危险,它运行了很多查询,我想将其最小化为1个查询。\n

query("SELECT * from categories");
    while($row = $fetchCat->fetch_assoc()) {
        $fetchPost = $mysqli->query("SELECT id, title, slug from posts where category=".$mysqli->real_escape_string($row['id'])." limit 10");
        // 处理我的代码。
    }
?>

\n我能否有一些“内连接”查询,可以将我的查询减少为1-2个,并获得与上面相同的结果?\n我希望获取每个分类的10篇文章。将来,我可能会有40-45个分类,而每个分类平均可能有80-90篇文章。使用以上方法获取所有40-45个分类的文章可能会让我的应用程序变得很慢。因此,我需要一种可行的方法,可以限制每个40-45个分类的文章记录。\n这不是简单的内连接,我在获取文章,而是实际上限制内连接记录的显示,以适应每个父表。

0
0 Comments

问题的原因是需要从每个类别的帖子中获取10条记录,但原始查询无法满足这个需求。解决方法是使用两个查询,第一个查询获取所有类别并存储在一个数组中,第二个查询使用group_concat和SUBSTRING_INDEX函数获取每个类别的10条记录,并将结果存储在一个数组中。

以下是解决方法的详细代码:

$cat_array = array();
$fetchCat = $mysqli->query("SELECT * from categories");
while($rowCat = $fetchCat->fetch_assoc()) {
   // Category processing....
}
$post_array = array();
$fetchPost = $mysqli->query("select category, 
             SUBSTRING_INDEX(group_concat(id), ',', 10) as post_id, 
             SUBSTRING_INDEX(group_concat(title), ',', 10) as post_title, 
             SUBSTRING_INDEX(group_concat(slug), ',', 10) as post_slug from posts 
             group by category;");
while($rowPost = $fetchPost->fetch_assoc()) {
    $post_array[ $rowPost['category'] ] [id] = $rowPost['post_id'];
    $post_array[ $rowPost['category'] ] [title] = $rowPost['post_title'];
    $post_array[ $rowPost['category'] ] [slug] = $rowPost['post_slug'];
}

通过上述代码,我们可以通过使用$category_array数组来获取每个类别的帖子列表。例如,要获取类别ID为"1"的所有标题和slug,只需要使用$post_array[1][id]即可。

感谢"AsConfused"指导我在"按组"的方向上继续努力,并提醒我还有一个命令可以使用:analyze table posts。

感谢大家!

0