作者dlikeayu (太阳拳vs野球拳)
看板PHP
标题Re: [请益] PHP回圈+Mysql搜寻优化问题
时间Mon Dec 23 21:44:35 2013
SELECT `shop` , SUM( price ) AS TOTAL_PRICE
FROM `table`
WHERE id
IN (
'EXB001', 'EXB002'
)
AND `shop`
IN (
'a001', 'a0004', 'a002'
) GROUP BY `shop`
※ 引述《kingoface (桑原)》之铭言:
: 大家好,
: 状况类似是这样
: Table
: shop id price
: s001 EXA001 500
: A0002 EXB002 400
: s001 EXC001 300
: g0012 EXD003 350
: b002 EXA001 500
: b002 EXA001 500
: shop会有不同的编码,没有规则,字元不固定.
: id是有规则的编码,只有前三码是数字,并且固定就6个字元
: 资料库约有几百万笔类似资料
: 而我想要知道id分别为EXA,EXB,EXC在各分店的总销售价格.
: 所以先做了两个阵列
: 比如
: $id_arr=array('EXA001','EXB002'~~~~~~~~~~巴拉巴拉);
: $shop_arr=array('s001','A0002'~~~~巴拉巴拉);
: 然後
: foreach($id_arr as $id_for)
: {
: foreach($shop_arr as $shop_for)
: {
: //以下开始叫出资料并且存成二为阵列,类似这样
: $sql="SELECT SUM(num1) as sumprice FROM (SELECT price as num1 FROM table WHERE id LIKE '{$id_for}%' AND shop LIKE '{$shop_for}%') as num2 ";
: $sumprice = mysql_fetch_object($sql);
: $ans_arr[$id_for][$shop_for]=$sumprice->price;
: }
: }
: 最後资料出来是出来了,但是跑了大概30多秒吧...超久.
: 我知道以上是很蠢的做法,囧兴.
: 所以想要请教各位先进,有没有更高级快速的做法呢?
: 我的想法是
: shop基本上应该还是用回圈去跑,但是id可以判断前三码,只截取前三码,
: 然後把他们GROUP BY,这样可行吗?
: 类似
: GROUP BY SUBSTR(id,0,2);
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.249.153.232
1F:→ kosjason:in的效能很可观耶 尤其是字串 这样下 应该会locked喔 12/23 21:54
2F:→ dlikeayu:应该比几万次的Like好更多吧@@? 12/23 22:16
3F:推 chenlarry:我也觉得应该会比like好很多,每次的like都是full table 12/23 22:51
4F:→ MOONRAKER:IN对LIKE,还满好笑的 |D 认为IN会输何不EXPLAIN一下 12/23 22:51
5F:→ chenlarry:scan ..@@ 12/23 22:51