【发布时间】:2017-04-24 22:29:54
【问题描述】:
有4张桌子
team
---------------
id | teamname |
1 | lal |
2 | sobuj |
member
-----------------------
id | membername| team |
1 | sagor | 1 |
2 | sumon | 1 |
dps
---------------------------------------------------
id | member| team | deposit | refund | ddate |
1 | 1 | 1 | 100 | 12 | 2016-09-01 |
2 | 2 | 1 | 120 | 34 | 2016-09-01 |
3 | 1 | 1 | 130 | 22 | 2016-09-01 |
4 | 3 | 1 | 120 | 0 | 2016-09-01 |
mvs
----------------------------------------------------
id | member| team | mvs_total| refund | ddate |
1 | 1 | 1 | 100 | 12 | 2016-09-01 |
2 | 2 | 1 | 120 | 34 | 2016-09-01 |
3 | 1 | 1 | 130 | 22 | 2016-09-01 |
4 | 3 | 1 | 120 | 0 | 2016-09-01 |
这是我的查询:
$result=mysql_query(select * from member where team='1');
$row=mysql_fetch_array($result);
do{
$aresult=mysql_query(select sum(deposit)-sum(refund)as balance from dps where member='$row[id]');
$arow=mysql_fetch_array($aresult);
echo $arow[balance];
$bresult=mysql_query(select sum(mvs_total)as mvs_balance from mvs where member='$row[id]' and date1<='2016-09-01');
$brow=mysql_fetch_array($bresult);
echo $brow[mvs_total];
} while($row=mysql_fetch_array($result));
如何避免子查询或如何节省时间建议请提前感谢。
【问题讨论】:
-
我在这里没有看到任何子查询
-
mysql 已弃用,请使用 PDO 或 mysqli
-
实际上我想避免循环查询我想使用像
SELECT member.mname, member.fn, loan.member, sum( loan.deposit ) - sum( loan.withdraw ) AS balance, sum( loan.deposit2 ) - sum( loan.withdraw2 ) AS balance2, sum( loan.total ) - sum( loan.lpay ) AS outsstanding FROM loan JOIN member ON ( loan.member = member.id ) WHERE loan.team = '10' AND loan.cs = 'Core' GROUP BY member这样的连接 -
您在第一个查询中为每一行执行 2 次查询,当然这会花费太多时间。尝试使用
group by -
你应该使用join来避免子查询。尝试在表之间建立关系并使用连接语句从差异表中获取数据。更多信息请参考以下链接:http://www.w3schools.com/sql/sql_join.asp