每个类别从帖子中限制10条记录。
每个类别从帖子中限制10条记录。
我有两个表格categories
和posts
,我不想为每个分类获取所有记录。我想要从每个分类中获取有限的行数。\ncategories
表格如下:\n
- \n
- ID
- Name
- Slug
\n
\n
\n
\nposts
表格如下:\n
- \n
- ID [主键]
- 标题
- Slug
- 内容
- 分类 [键 - 外键]
- 发布日期
\n
\n
\n
\n
\n
\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这不是简单的内连接,我在获取文章,而是实际上限制内连接记录的显示,以适应每个父表。
问题的原因是需要从每个类别的帖子中获取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。
感谢大家!