首页 > 求教一个SQL的写法

求教一个SQL的写法

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

提供一个思路,我个人在实际项目中更倾向于此种方法。

不要什么问题都非得一句SQL搞定问题,这样SQL难以维护,而且也不利于mysql去缓存查询结果。
看你的问题描述更像是要展示特定信息,而且是很可能持续展示同样的查询结构。

我的建议:
将查询拆分成多个子查询,在外层代码中进行循环查询,最后合并查询结果。
其查询结果在代码中进行缓存,定时刷新缓存以减少反复查询。


http://stackoverflow.com/questions/12693989/tinymce-html5-placeholder-by-reading-attribute-from-textarea


http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group

【热门文章】
【热门文章】