mysql - 求教一个SQL的写法
迷茫
迷茫 2017-04-17 11:55:42
[MySQL讨论组]
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来一次性选出符合的记录。各位大大是否有更好,高效的方法呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
PHP中文网

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

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

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

巴扎黑

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

阿神

一条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
迷茫

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号