如何解决根据数据库值限制返回的结果
我有两个表格,类别和故事。
Stories 表包含按类别组织的内容。
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,"Tax Cuts","Election",1
4,2,"Peanuts",1
5,"Garfield",1
6,"Archie",1
我想要一个查询,该查询将根据 category_story_count 返回每个类别的正确故事数量,以及故事是否处于活动状态 (story_active = 1)
所以结果应该是这样的:
"news","Tax Hike"
"news","Tax Cuts"
"funnies","Peanuts"
"funnies","Garfield"
"funnies","Archie"
两个“新闻”故事,因为新闻类别 1 的 category_story_count = 2,三个“搞笑”故事,因为搞笑 2 的 category_story_count = 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 上测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。