Re: [請益] PHP迴圈+Mysql搜尋優化問題
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
→
12/23 21:54, , 1F
12/23 21:54, 1F
→
12/23 22:16, , 2F
12/23 22:16, 2F
推
12/23 22:51, , 3F
12/23 22:51, 3F
→
12/23 22:51, , 4F
12/23 22:51, 4F
→
12/23 22:51, , 5F
12/23 22:51, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 5 篇):