关于提取二级分类下N条数据的问题(整了三天了,没整出来,不行了,向大伙求教)
时间:2011-06-15
来源:互联网
有一分类数据表,有M个分类的数据(分类数和分类所属的数据数不定),
实现:
提取第一个分类N条数据,提取第二个分类N条数据……提取第M个分类N条数据;
提取第一个分类N条数据,提取第二个分类N条数据……提取第M个分类N条数据;
提取第一个分类N条数据,提取第二个分类N条数据……提取第M个分类N条数据;
…………
直到将所有数据提取后,写入另一个表中。
可能我说得有些不大清楚,举个现实的例子,和分类列表页差不多,A分类下有B、C、D等若干个二级分类,显示A分类列表页时,需先显示B分类3条数据,C分类3条数据,D分类3条数据,接着是B分类的下3条数据,C分类的下3条数据,D分类的下3条数据…………就这样继续下去。
求教各位,用MYSQL -SQL语句应该如何实现呢?谢谢。
作者: gijquery 发布时间: 2011-06-15
select * from 有一分类数据表 a where 分类='A' and 3>(select count(*) from 有一分类数据表 where 二级分类=a.二级分类 and ID>a.ID)
作者: ACMAIN_CHM 发布时间: 2011-06-15
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
作者: ACMAIN_CHM 发布时间: 2011-06-15
'截至2011-06-15 01:21:11 用户结帖率0.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html
8、如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖
作者: ACMAIN_CHM 发布时间: 2011-06-15
作者: wwwwb 发布时间: 2011-06-15
SQL code
select * from 有一分类数据表 a
where 分类='A'
and 3>(select count(*) from 有一分类数据表 where 二级分类=a.二级分类 and ID>a.ID)
感谢ACMAIN_CHM的提醒,问完结贴万岁!
根据以上方法试了下,测试表中的总记录数3千多,二级分类数是8个(只是测试环境,实际应用环境数据量和二级分类数要更多些),查询时间用了11.828s,效率很低。且这个查询的只是提取了二级分类前3条的数据,没有继续向下递归,可以用循环方式,不过哪样速度将更慢了!
请教有没有提效的更好方法呀?十分感谢各位的帮助!
作者: gijquery 发布时间: 2011-06-15
引用 1 楼 acmain_chm 的回复:
SQL code
select * from 有一分类数据表 a
where 分类='A'
and 3>(select count(*) from 有一分类数据表 where 二级分类=a.二级分类 and ID>a.ID)
感谢ACMAIN_CHM的提醒,问完结贴万岁!
根据以上方法试了下,测试表中的总记录数3千多,二级分……
rs = select * from 有一分类数据表 where 分类='A'
while not rs.eof
rs2 = select * from 有一分类数据表 where 分类=rs(二级分类) limit 3
作者: ACMAIN_CHM 发布时间: 2011-06-15
贴建表及插入记录的SQL,及要求结果出来看看
感谢你的提醒,拿出数据将更直观,谢谢!
SQL code
## 建表:id是唯一的 CREATE TABLE `cx_test` ( `id` bigint(20) NOT NULL, `cate1` varchar(100) DEFAULT NULL, `cate2` varchar(100) DEFAULT NULL, `g_title` varchar(255) DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; ## 插入测试数据: INSERT INTO `cx_test` VALUES (1, 'X', 'AAA1', '测试AAA1001'); INSERT INTO `cx_test` VALUES (2, 'X', 'AAA1', '测试AAA1002'); INSERT INTO `cx_test` VALUES (3, 'X', 'AAA1', '测试AAA1003'); INSERT INTO `cx_test` VALUES (4, 'X', 'AAA1', '测试AAA1004'); INSERT INTO `cx_test` VALUES (5, 'X', 'AAA1', '测试AAA1005'); INSERT INTO `cx_test` VALUES (6, 'X', 'AAA1', '测试AAA1006'); INSERT INTO `cx_test` VALUES (7, 'X', 'AAA1', '测试AAA1007'); INSERT INTO `cx_test` VALUES (8, 'X', 'AAA1', '测试AAA1008'); INSERT INTO `cx_test` VALUES (9, 'X', 'AAA1', '测试AAA1009'); INSERT INTO `cx_test` VALUES (10, 'X', 'AAA1', '测试AAA10010'); INSERT INTO `cx_test` VALUES (11, 'X', 'AAA1', '测试AAA10011'); INSERT INTO `cx_test` VALUES (12, 'X', 'AAA1', '测试AAA10012'); INSERT INTO `cx_test` VALUES (13, 'X', 'AAA2', '测试AAA2001'); INSERT INTO `cx_test` VALUES (14, 'X', 'AAA2', '测试AAA2002'); INSERT INTO `cx_test` VALUES (15, 'X', 'AAA2', '测试AAA2003'); INSERT INTO `cx_test` VALUES (16, 'X', 'AAA2', '测试AAA2004'); INSERT INTO `cx_test` VALUES (17, 'X', 'AAA2', '测试AAA2005'); INSERT INTO `cx_test` VALUES (18, 'X', 'AAA2', '测试AAA2006'); INSERT INTO `cx_test` VALUES (19, 'X', 'AAA2', '测试AAA2007'); INSERT INTO `cx_test` VALUES (20, 'X', 'AAA2', '测试AAA2008'); INSERT INTO `cx_test` VALUES (21, 'X', 'AAA2', '测试AAA2009'); INSERT INTO `cx_test` VALUES (22, 'X', 'AAA2', '测试AAA20010'); INSERT INTO `cx_test` VALUES (23, 'X', 'AAA2', '测试AAA20011'); INSERT INTO `cx_test` VALUES (24, 'X', 'AAA3', '测试AAA3001'); INSERT INTO `cx_test` VALUES (25, 'X', 'AAA3', '测试AAA3002'); INSERT INTO `cx_test` VALUES (26, 'X', 'AAA3', '测试AAA3003'); INSERT INTO `cx_test` VALUES (27, 'X', 'AAA3', '测试AAA3004'); INSERT INTO `cx_test` VALUES (28, 'X', 'AAA3', '测试AAA3005'); INSERT INTO `cx_test` VALUES (29, 'X', 'AAA3', '测试AAA3006'); INSERT INTO `cx_test` VALUES (30, 'X', 'AAA3', '测试AAA3007'); INSERT INTO `cx_test` VALUES (31, 'X', 'AAA3', '测试AAA3008'); INSERT INTO `cx_test` VALUES (32, 'X', 'AAA3', '测试AAA3009'); INSERT INTO `cx_test` VALUES (33, 'X', 'AAA3', '测试AAA30010'); INSERT INTO `cx_test` VALUES (34, 'X', 'AAA3', '测试AAA30011'); INSERT INTO `cx_test` VALUES (35, 'X', 'AAA3', '测试AAA30012'); INSERT INTO `cx_test` VALUES (36, 'X', 'AAA3', '测试AAA30013'); INSERT INTO `cx_test` VALUES (37, 'X', 'AAA3', '测试AAA30014');
根据贴注意涵义和以上插入的测试数据,需得到的写入另一个表的查询结果如下:
(----线是为了各位查看方便加上的,无意义)
1 X AAA1 测试AAA1001
2 X AAA1 测试AAA1002
3 X AAA1 测试AAA1003
13 X AAA2 测试AAA2001
14 X AAA2 测试AAA2002
15 X AAA2 测试AAA2003
24 X AAA3 测试AAA3001
25 X AAA3 测试AAA3002
26 X AAA3 测试AAA3003
------------------------------------
4 X AAA1 测试AAA1004
5 X AAA1 测试AAA1005
6 X AAA1 测试AAA1006
16 X AAA2 测试AAA2004
17 X AAA2 测试AAA2005
18 X AAA2 测试AAA2006
27 X AAA3 测试AAA3004
28 X AAA3 测试AAA3005
29 X AAA3 测试AAA3006
---------------------------------------
7 X AAA1 测试AAA1007
8 X AAA1 测试AAA1008
9 X AAA1 测试AAA1009
19 X AAA2 测试AAA2007
20 X AAA2 测试AAA2008
21 X AAA2 测试AAA2009
30 X AAA3 测试AAA3007
31 X AAA3 测试AAA3008
32 X AAA3 测试AAA3009
------------------------------------------
10 X AAA1 测试AAA10010
11 X AAA1 测试AAA10011
12 X AAA1 测试AAA10012
22 X AAA2 测试AAA20010
23 X AAA2 测试AAA20011
33 X AAA3 测试AAA30010
34 X AAA3 测试AAA30011
35 X AAA3 测试AAA30012
------------------------------------------
36 X AAA3 测试AAA30013
37 X AAA3 测试AAA30014
------------------------------------------
作者: gijquery 发布时间: 2011-06-15
作者: WWWWA 发布时间: 2011-06-15
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28