我有一个表名“tbl_featured_professional”,其中的字段是:
id,
user_id,
ranking and
score,
createdDate 我想要的是,前40条记录是从排名(这是唯一的)排序的,所有其他记录在40之后都是按分数排序的。我想通过mysql而不是PHP来完成这个任务。我该怎么做?谢谢。
发布于 2019-01-19 20:44:23
如果排名--顾名思义--是一个从1开始并递增的数字,那么:
select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
(case when fp.ranking <= 40 then ranking end),
score;发布于 2019-01-19 13:28:58
检查我的解决方案
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
)发布于 2019-01-19 13:39:04
与UNION ALL和NOT IN一起使用两个子查询应该适合您。第一个查询将选择由ranking排序的40行,第二个带有子查询的查询将选择所有其他行(除外),除了(第一个子查询已经选择的前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 scorehttps://stackoverflow.com/questions/54267563
复制相似问题