比如有两个表,第一个m表:
mID,name,pid
1, xxx , 0
2, xxx, 1
3, xxx, 2
4, xxx, 3
第二个i表:
id, mId,money
1, 1, 100,
2, 2, 500
3, 1, 1000
4, 4, 600现在假设两个表都是上百万的数据;
需要查询:指定一个mId,查询跟mid有关联的所有的m表的数据,根据pid; 比如给定一个mid=1,那么就要查询出mId=1,2,3,4的数据; 同时,需要查询出mid对应的money的sum;比如:查询mID=1的,那么就会出现如下的数据:
mID moneySum
1 1100
2 500
3 0
4 600
自己写了一个,但是查询比较慢。 所以想问问各位,有没有类似的列子,或提供个思路;有sql更好了。谢谢了。
mID,name,pid
1, xxx , 0
2, xxx, 1
3, xxx, 2
4, xxx, 3
第二个i表:
id, mId,money
1, 1, 100,
2, 2, 500
3, 1, 1000
4, 4, 600现在假设两个表都是上百万的数据;
需要查询:指定一个mId,查询跟mid有关联的所有的m表的数据,根据pid; 比如给定一个mid=1,那么就要查询出mId=1,2,3,4的数据; 同时,需要查询出mid对应的money的sum;比如:查询mID=1的,那么就会出现如下的数据:
mID moneySum
1 1100
2 500
3 0
4 600
自己写了一个,但是查询比较慢。 所以想问问各位,有没有类似的列子,或提供个思路;有sql更好了。谢谢了。
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
-- 关联的所有金额
DECLARE orderSumMoney VARCHAR(100);
SET sTemp = memberIdStart;
SET sTempChd =cast(memberIdStart as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(memberId) INTO sTempChd FROM member where FIND_IN_SET(recommendedPerson,sTempChd)>0;
END WHILE;
-- 查询所有关联的人所消费的金额
select SUM(orderMoney) into orderSumMoney from orderinfo where memberId in(sTemp);
RETURN orderSumMoney;
END
加了索引也是慢。这种递归的查询,估计也快不起来了。