A表 (年级)
id name
1 一年级
2 二年级
3 三年级 B表 (班级学生)
id parentId name
1 1 a
2 1 b
3 2 c
4 3 d
5 1 e
6 2 fB表中的ParentId是A表中的id的外键 想要的结果 (每个年级对应多少人)
id name count
1 一年级 3
2 二年级 2
3 三年级 1以上功能怎么用存储过程实现 用循环方式去去读每个年级的人 不用一条联合查询完成
id name
1 一年级
2 二年级
3 三年级 B表 (班级学生)
id parentId name
1 1 a
2 1 b
3 2 c
4 3 d
5 1 e
6 2 fB表中的ParentId是A表中的id的外键 想要的结果 (每个年级对应多少人)
id name count
1 一年级 3
2 二年级 2
3 三年级 1以上功能怎么用存储过程实现 用循环方式去去读每个年级的人 不用一条联合查询完成
from a
from
(
select A.id,A.name
from A,B
where A.id=B.parentId
)T
group by T.id
from
(
select A.id,A.name
from A,B
where A.id=B.parentId
)T
group by T.id,T.name
DELIMITER $$USE `aa`$$DROP PROCEDURE IF EXISTS `yb`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `yb`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE zid INT;
DECLARE cur1 CURSOR FOR SELECT DISTINCT id FROM la;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
FETCH cur1 INTO zid;
WHILE done=0 DO
SELECT COUNT(*) INTO @za FROM lb WHERE parentId=zid;
SELECT @za;
UPDATE la SET gg=@za WHERE id=zid;
FETCH cur1 INTO zid;
END WHILE;
END$$DELIMITER ;
RETURNS INT
BEGIN
RETURN (SELECT COUNT(*) FROM LB WHERE parentId=zid);
END$$DELIMITER ;
这个种是可以达到目的 我的语句如下:
select a.*, b.cardworth,(select count(id) from CardCenter where isflag =1 and taskId=a.id ) as openNumber, c.trueName
from CardTask a, CardType b,UserManager c where a.typeId = b.id and a.adminName = c.userId order by a.id desc 也试过你的方法 我的则个表有几十万条数据呢 我的语句和你给我的 现在都用100秒 这个性能不行
下面是我用代码分开查询 用了十几秒 所以我想用存储过程循环读取那个总数赋值 感觉那样会快带点 查询集合
PaginateResult paginateResult = payFactoryFacade.getCardTaskFactory().findCardTaskRecordList(payLook.getStart(),payLook.getNumber());
List<CardTaskExtendReturn> cardTask = paginateResult.getList();
List<CardTaskExtendReturn> cardTaskBack = new ArrayList<CardTaskExtendReturn>();
//循环集合
for(int i=0;i<cardTask.size();i++){CardTaskExtendReturn cardTaskBean = cardTask.get(i);
System.out.print(+cardTaskBean.getId()+",");
//根据单据号编号查询开卡数量
int openNumber = payFactoryFacade.getCardCenterFactory().getTotalOpenCardNumber("", "", cardTaskBean.getId()+"", "1");
cardTaskBean.setOpenNumber(openNumber);
cardTaskBack.add(cardTaskBean);
}
1 一年级 3
2 二年级 2
3 三年级 1
(select count(id) from CardCenter where isflag =1 and taskId=a.id ) as openNumber,
c.trueName
from CardTask a, CardType b,UserManager c
where a.typeId = b.id and a.adminName = c.userId
order by a.id desc 检查一下你的
select a.*, b.cardworth,
c.trueName
from CardTask a, CardType b,UserManager c
where a.typeId = b.id and a.adminName = c.userId
order by a.id desc 这样不加统计,速度如何?如果仍慢则应该考虑如何提升这个语句的效率。 如果快,则创建索引create index xx on CardCenter(taskId,isflag);
我给taskId创建索引了 一下子快了好多 但是不知道一个表最多可以创建多少个索引
多创建索引好吗
还是没人告诉我用存储过程怎么循环查询赋值
我给taskId加上索引 快多了 但是不知道一个表最多可以建多少个 什么时候最优
还是没人告诉我用存储过程怎么实现 循环赋值
A表 (年级)
id name
1 一年级
2 二年级
3 三年级 B表 (班级学生)
id parentId name
1 1 a
2 1 b
3 2 c
4 3 d
5 1 e
6 2 fB表中的ParentId是A表中的id的外键 想要的结果 (每个年级对应多少人)
id name count
1 一年级 3
2 二年级 2
3 三年级 1
表中可以添加足够多的索引了。好像是 1024个。