首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对前40条记录和其他记录的MYSQL查询

问对前40条记录和其他记录的MYSQL查询
EN

Stack Overflow用户
提问于 2019-01-19 13:24:02
回答 4查看 71关注 0票数 0

我有一个表名“tbl_featured_professional”,其中的字段是:

代码语言:javascript
复制
id,
user_id,
ranking and 
score,
createdDate 

我想要的是,前40条记录是从排名(这是唯一的)排序的,所有其他记录在40之后都是按分数排序的。我想通过mysql而不是PHP来完成这个任务。我该怎么做?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-19 20:44:23

如果排名--顾名思义--是一个从1开始并递增的数字,那么:

代码语言:javascript
复制
select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
         (case when fp.ranking <= 40 then ranking end),
         score;
票数 0
EN

Stack Overflow用户

发布于 2019-01-19 13:28:58

检查我的解决方案

代码语言:javascript
复制
select * from 
(
  select * from tbl_featured_professional
  order by ranking
  limit 40
)
union all
select * from 
(
  select * from tbl_featured_professional
  order by score
  limit 9999999 offset 40
)
票数 0
EN

Stack Overflow用户

发布于 2019-01-19 13:39:04

与UNION ALL和NOT IN一起使用两个子查询应该适合您。第一个查询将选择由ranking排序的40行,第二个带有子查询的查询将选择所有其他行(除外),除了(第一个子查询已经选择的前40行)并按score对其进行排序。UNION ALL子句将将这2个子查询记录合并为一个集合。希望这有帮助,也可以理解:)现在。

代码语言:javascript
复制
 SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40
 UNION ALL
 SELECT * FROM tbl_featured_professional WHERE id NOT IN (SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40) 
 ORDER BY score
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54267563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档