Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于DB值返回的限制结果_Mysql_Greatest N Per Group - Fatal编程技术网

Mysql 基于DB值返回的限制结果

Mysql 基于DB值返回的限制结果,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有两个表格、类别和故事 “故事”表包含按类别组织的内容 categories_id, category_name, category_story_count 1, news, 2 2, funnies, 3 stories_id, categories_id, story_name, story_content, story_active 1, 1, "Tax Hike", "blah blah", 1 2, 1, "Tax Cuts&quo

我有两个表格、类别和故事

“故事”表包含按类别组织的内容

categories_id, category_name, category_story_count
1, news, 2
2, funnies, 3

stories_id, categories_id, story_name, story_content, story_active
1, 1, "Tax Hike", "blah blah", 1
2, 1, "Tax Cuts", "blah blah", 1
2, 1, "Election", "blah blah", 1 
4, 2, "Peanuts", "blah blah", 1
5, 2, "Garfield", "blah blah", 1
6, 2, "Archie", "blah blah", 1 
我想要一个查询,它将根据category\u story\u计数返回每个类别的正确故事数,并且如果故事是活动的,那么story\u active=1

因此,结果应该如下所示:

"news", "Tax Hike"
"news", "Tax Cuts"
"funnies", "Peanuts"
"funnies", "Garfield"
"funnies", "Archie"
两个新闻故事,因为新闻类别1,有一个类别故事计数=2,三个搞笑,因为搞笑2,有一个类别故事计数=3

我尝试过内部连接、嵌套和限制,但就是无法让它返回我的目标

任何帮助都将不胜感激

编辑: MySQL版本
8.0.23以下是一个使用窗口功能的解决方案:

with cte as ( 
  select *, row_number() over (partition by c.categories_id order by s.stories_id) as rownum 
  from Categories as c join Stories as s using (categories_id) 
) select * from cte where rownum <= category_story_count;

+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+
| categories_id | category_name | category_story_count | stories_id | story_name | story_content | story_active | rownum |
+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+
|             1 | new           |                    2 |          1 | Tax Hike   | blah blah     |            1 |      1 |
|             1 | new           |                    2 |          2 | Tax Cuts   | blah blah     |            1 |      2 |
|             2 | funnies       |                    3 |          4 | Peanuts    | blah blah     |            1 |      1 |
|             2 | funnies       |                    3 |          5 | Garfield   | blah blah     |            1 |      2 |
|             2 | funnies       |                    3 |          6 | Archie     | blah blah     |            1 |      3 |
+---------------+---------------+----------------------+------------+------------+---------------+--------------+--------+

在MySQL 8.0.23上测试。

您使用的MySQL版本是什么?也就是说,选择什么版本;回来如果您使用MySQL 8.0.VERSION 8.0.23,可能会有一个带有窗口函数的解决方案