这个查询给出了奇怪的结果:
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)
发布于 2013-04-19 13:45:47
(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)如果稍后要添加另一组排序/筛选列,请将其包装为如下所示
select * from ( /* previous query goes here */ ) tt
where id > 100
order by id注意,ranktype是varchar,所以它是按字典排序的,所以top20 < top5。你必须采用自然排序或其他方法才能使它正确。
发布于 2013-04-19 13:49:32
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发布于 2013-04-19 13:44:27
您的结果实际上是按升序排列的,因为列rank_type是varchar类型的top20,而top5是字符串比较的第一位。
如果您只想在top5和top20之间进行处理,那么一个肮脏的解决方案可能是:
ORDER BY rankType deschttps://stackoverflow.com/questions/16105967
复制相似问题