Msg
Id Type Date
1 type1 2003-9-10
2 type1 2003-9-10
3 type2 2003-9-11
4 type1 2003-9-11
5 type2 2003-9-11
...
...
1000 type3 2003-9-11
现在我想通过Type字段分类,并且每类都取出规定条数的记录。
比如说:Type = type1的,Type = type2, Type = type3的分别取5条出来,该怎么写,一句话。
14 个解决方案
#1
哦,数据库是MYSQL.
#2
SELECT * FROM Msg WHERE Type=type1 LIMIT 5
取出规定条数请查看LIMIT 用法
取出规定条数请查看LIMIT 用法
#3
To jxbicestare(香波):这只能取出一个类型的规定数量的语句。
#4
请高人指点
#5
我知道,你需要的一个SQL的欠套..... 把同类的理出来....你索引TYPE,关键字就好了..
具体怎么写,我不会!!
具体怎么写,我不会!!
#6
用union !!!不过不知道mysql有没有???sqlserver就没问题
#7
可以用 UNION 的
#8
如果type的值不定或数量较多,用union没法解决这个问题,楼主只能用两个以上查询来实现这个功能了。
#9
使用UNION方法,不过需要Mysql4.0版本以上!例如:
select * from msg where type='type1' limit 5 union select * from msg wher
e type='type2' limit 5 union select * from msg where type='type3' limit 15;
比较怪异的是,各union子语句中除了最后一个子语句外,limit限定的都是数字5,但最后一条必须是想取得的记录数的总和!
其中5可以换成任何你想要得数字,每个union子语句的这个数字可以不同,但最后一个limit的数字必须是总和!
缺陷:如果某个union子语句满足条件的记录不足指定的数字时,这个子语句之后的union子语句的结果会不正确!
请楼主试试吧!
select * from msg where type='type1' limit 5 union select * from msg wher
e type='type2' limit 5 union select * from msg where type='type3' limit 15;
比较怪异的是,各union子语句中除了最后一个子语句外,limit限定的都是数字5,但最后一条必须是想取得的记录数的总和!
其中5可以换成任何你想要得数字,每个union子语句的这个数字可以不同,但最后一个limit的数字必须是总和!
缺陷:如果某个union子语句满足条件的记录不足指定的数字时,这个子语句之后的union子语句的结果会不正确!
请楼主试试吧!
#10
小木讲的真好。
#11
To lxf_1976(小木),如果type不只是type1, type2, type3,那上面的语句就不会适用。 我想这个问题可能只有用多个查询来处理。 嵌套处理不了吧。
#12
关注
#13
呵呵,是的!
如果要查询type的值太多,用union确实不太合适,而且我提到的那个缺陷出现的机率更大了!那就建议在应用层多想想更好的办法吧!
如果要查询type的值太多,用union确实不太合适,而且我提到的那个缺陷出现的机率更大了!那就建议在应用层多想想更好的办法吧!
#14
我看只有从应用层想办法,就算能用一句SQL写出来,性能也不会好的。
谢谢各位了。 结帖。
谢谢各位了。 结帖。
#1
哦,数据库是MYSQL.
#2
SELECT * FROM Msg WHERE Type=type1 LIMIT 5
取出规定条数请查看LIMIT 用法
取出规定条数请查看LIMIT 用法
#3
To jxbicestare(香波):这只能取出一个类型的规定数量的语句。
#4
请高人指点
#5
我知道,你需要的一个SQL的欠套..... 把同类的理出来....你索引TYPE,关键字就好了..
具体怎么写,我不会!!
具体怎么写,我不会!!
#6
用union !!!不过不知道mysql有没有???sqlserver就没问题
#7
可以用 UNION 的
#8
如果type的值不定或数量较多,用union没法解决这个问题,楼主只能用两个以上查询来实现这个功能了。
#9
使用UNION方法,不过需要Mysql4.0版本以上!例如:
select * from msg where type='type1' limit 5 union select * from msg wher
e type='type2' limit 5 union select * from msg where type='type3' limit 15;
比较怪异的是,各union子语句中除了最后一个子语句外,limit限定的都是数字5,但最后一条必须是想取得的记录数的总和!
其中5可以换成任何你想要得数字,每个union子语句的这个数字可以不同,但最后一个limit的数字必须是总和!
缺陷:如果某个union子语句满足条件的记录不足指定的数字时,这个子语句之后的union子语句的结果会不正确!
请楼主试试吧!
select * from msg where type='type1' limit 5 union select * from msg wher
e type='type2' limit 5 union select * from msg where type='type3' limit 15;
比较怪异的是,各union子语句中除了最后一个子语句外,limit限定的都是数字5,但最后一条必须是想取得的记录数的总和!
其中5可以换成任何你想要得数字,每个union子语句的这个数字可以不同,但最后一个limit的数字必须是总和!
缺陷:如果某个union子语句满足条件的记录不足指定的数字时,这个子语句之后的union子语句的结果会不正确!
请楼主试试吧!
#10
小木讲的真好。
#11
To lxf_1976(小木),如果type不只是type1, type2, type3,那上面的语句就不会适用。 我想这个问题可能只有用多个查询来处理。 嵌套处理不了吧。
#12
关注
#13
呵呵,是的!
如果要查询type的值太多,用union确实不太合适,而且我提到的那个缺陷出现的机率更大了!那就建议在应用层多想想更好的办法吧!
如果要查询type的值太多,用union确实不太合适,而且我提到的那个缺陷出现的机率更大了!那就建议在应用层多想想更好的办法吧!
#14
我看只有从应用层想办法,就算能用一句SQL写出来,性能也不会好的。
谢谢各位了。 结帖。
谢谢各位了。 结帖。