id | title | country |
---|---|---|
1 | The news | zh |
2 | the two news | zh |
3 | the three news | jp |
4 | the four news | jp |
表结构大概如上,是个类似资讯表。现在需要选出指定几个国家的6条资讯,即为指定的几个国家分别选出6条记录来展示。
个人想到用union来一次性选出符合的记录。各位大大是否有更好,高效的方法呢?
id | title | country |
---|---|---|
1 | The news | zh |
2 | the two news | zh |
3 | the three news | jp |
4 | the four news | jp |
表结构大概如上,是个类似资讯表。现在需要选出指定几个国家的6条资讯,即为指定的几个国家分别选出6条记录来展示。
个人想到用union来一次性选出符合的记录。各位大大是否有更好,高效的方法呢?
一条SQL执行起来不难,比如这样(可能不完全符合题主的要求):
select substring_index(GROUP_CONCAT(TITLE SEPARATOR '\n'),'\n',6) from NEWS group by COUNTRY
尽管如此,但我赞同 @AntonyBi 的观点。
如果表关系有些复杂的话,建议不要试图用一条SQL拯救世界。
SQLServer中可以使用ROW_NUMBER()函数实现。
SELECT n.*
FROM news n
JOIN (SELECT id,
ROW_NUMBER() OVER(PARTITION BY country
ORDER BY id) AS rid
FROM news
WHERE country IN('zh','jp')) m ON n.id = m.id AND m.rid <= 6
5 回答3.4k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
3 回答2.1k 阅读
1 回答3.6k 阅读
1 回答887 阅读
提供一个思路,我个人在实际项目中更倾向于此种方法。
不要什么问题都非得一句SQL搞定问题,这样SQL难以维护,而且也不利于mysql去缓存查询结果。
看你的问题描述更像是要展示特定信息,而且是很可能持续展示同样的查询结构。