[請益] PHP迴圈+Mysql搜尋優化問題
大家好,
狀況類似是這樣
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: 59.124.195.130
→
12/23 17:35, , 1F
12/23 17:35, 1F
→
12/23 17:35, , 2F
12/23 17:35, 2F
→
12/23 17:36, , 3F
12/23 17:36, 3F
→
12/23 17:48, , 4F
12/23 17:48, 4F
→
12/23 19:57, , 5F
12/23 19:57, 5F
→
12/23 19:58, , 6F
12/23 19:58, 6F
→
12/23 21:10, , 7F
12/23 21:10, 7F
→
12/23 21:13, , 8F
12/23 21:13, 8F
→
12/23 21:14, , 9F
12/23 21:14, 9F
→
12/23 21:15, , 10F
12/23 21:15, 10F
→
12/23 21:15, , 11F
12/23 21:15, 11F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 5 篇):