MYSQL 查询前 40 条记录和其他记录

MYSQL query for first 40 records and else records

我有一个 table 名称 'tbl_featured_professional',其中字段是:

id,
user_id,
ranking and 
score,
createdDate 

我想要的是前 40 条记录按排名排序(这是唯一的),而 40 条之后的所有其他记录按分数排序。我想从 mysql 而不是 PHP 开始。我怎样才能做到这一点?谢谢。

检查我的解决方案

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
)

UNION ALLNOT IN 一起使用 2 个子查询应该适合您。 第一个查询将 select 按 ranking 排序的 40 行,带有子查询的第二个查询将 select 所有其他行 除了第一个 第一个子查询已经 select 编辑了 40 行,并按 score 对其排序。 UNION ALL 子句将这 2 个子查询记录合并为一个集合。希望这会有所帮助并且可以理解 :) 现在。

 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

使用 2 个子查询和 UNION
第 1 个获得按 ranking
排序的前 40 个 第二个按 score:

对剩余行重新排序
SELECT * 
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
  SELECT * FROM (
    SELECT * FROM tbl_featured_professional
    ORDER BY ranking
    LIMIT 40, 18446744073709551615
  )
  ORDER BY score
)

18446744073709551615 = 2^64 - 1,参见 this

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

select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
         (case when fp.ranking <= 40 then ranking end),
         score;