Php 如何对下表进行排序&;得到那些前5-5记录,前20-20记录?

Php 如何对下表进行排序&;得到那些前5-5记录,前20-20记录?,php,mysql,database,Php,Mysql,Database,此查询给出了奇怪的结果: SELECT `user_id`,`rankType` FROM `ranks` WHERE `user_id` =23 AND (`rankType` = "top5" OR `rankType` = "top20") ORDER BY rankType LIMIT 0 , 30 给你 我想要实现的目标是: 1) 仅获取5条排名前5的记录,20条排名前20的记录 2) 我想以升序显示等级类型的结果(但如果您在演

此查询给出了奇怪的结果:

    SELECT `user_id`,`rankType`
    FROM `ranks`
    WHERE `user_id` =23
    AND (`rankType` = "top5"
    OR `rankType` = "top20")
    ORDER BY rankType
    LIMIT 0 , 30
给你

我想要实现的目标是:

1) 仅获取5条排名前5的记录,20条排名前20的记录


2) 我想以
升序显示等级类型的
结果(但如果您在演示小提琴中看到,它显示的是适当的,
可能只是考虑20和5中的2

您的结果实际上是升序,因为列rank_类型是
varchar
类型,所以在字符串比较中,top20排在top5之前

如果您只想在前5名和前20名之间进行交易,那么肮脏的解决方案可能是:

ORDER BY rankType desc

您的结果实际上是按升序排列的,因为列rank_类型是
varchar
类型,在字符串比较中,top20排在top5之前

如果您只想在前5名和前20名之间进行交易,那么肮脏的解决方案可能是:

ORDER BY rankType desc
如果以后要添加另一组排序/筛选列,请将其全部打包为

select * from ( /* previous query goes here */ ) tt
where id > 100
order by id
注意,
ranktype
是varchar,所以它是按字典顺序排序的,所以top20 如果以后要添加另一组排序/筛选列,请将其全部打包为

select * from ( /* previous query goes here */ ) tt
where id > 100
order by id

注意,
ranktype
是varchar,所以它是按字典顺序排序的,所以top20
ORDER BY FIND_IN_SET(rankType,'top5,top20')

一种可能性是不进行两次查询并合并它们:

ORDER BY FIND_IN_SET(rankType,'top5,top20')

您使用的数据库名为mysql,而不是mysqliDatabase您使用的数据库名为mysql,而不是mysqliNo,因为我还需要处理其他类型的排名不,因为我还需要处理其他类型的排名是的,看起来我们两人同时发布,但他快了一点!是的,看起来我们两个在同一时间发布,但他快了一点!