首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对下表进行排序&获得前5-5项记录,前20-20项记录?

如何对下表进行排序&获得前5-5项记录,前20-20项记录?
EN

Stack Overflow用户
提问于 2013-04-19 13:37:07
回答 4查看 64关注 0票数 0

这个查询给出了奇怪的结果:

代码语言:javascript
复制
    SELECT `user_id`,`rankType`
    FROM `ranks`
    WHERE `user_id` =23
    AND (`rankType` = "top5"
    OR `rankType` = "top20")
    ORDER BY rankType
    LIMIT 0 , 30

这里是SQLfiddle

我想要实现的是:

1)仅获得5条top5秩型记录,20条秩型top20记录

2)我想在ascending order of 秩型中显示结果。(但如果你在演示小提琴中看到的话,它显示得恰到好处,may be it is only considering 2 from 20 & 5)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-19 13:45:47

代码语言:javascript
复制
(SELECT `id`,`user_id`,`rankType`
FROM `ranks`
WHERE `user_id` =23
AND `rankType` = "top5"
ORDER BY rankType
LIMIT 0, 5)

union 

(SELECT `id`,`user_id`,`rankType`
FROM `ranks`
WHERE `user_id` =23
AND `rankType` = "top20"
ORDER BY rankType
LIMIT 0, 20)

如果稍后要添加另一组排序/筛选列,请将其包装为如下所示

代码语言:javascript
复制
select * from ( /* previous query goes here */ ) tt
where id > 100
order by id

注意,ranktype是varchar,所以它是按字典排序的,所以top20 < top5。你必须采用自然排序或其他方法才能使它正确。

票数 3
EN

Stack Overflow用户

发布于 2013-04-19 13:49:32

代码语言:javascript
复制
SELECT `id`,`user_id`,`rankType`
FROM `ranks`
WHERE `user_id` =23
AND `rankType` = "top5" limit 5
union
SELECT `id`,`user_id`,`rankType`
FROM `ranks`
WHERE `user_id` =23
AND `rankType` = "top20" limit 20
票数 1
EN

Stack Overflow用户

发布于 2013-04-19 13:44:27

您的结果实际上是按升序排列的,因为列rank_type是varchar类型的top20,而top5是字符串比较的第一位。

如果您只想在top5和top20之间进行处理,那么一个肮脏的解决方案可能是:

代码语言:javascript
复制
ORDER BY rankType desc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16105967

复制
相关文章

相似问题

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