| << セッションのタイムアウトについて | 質問一覧 | 携帯から画像をアップロードするには >> |
- キーワードが設定されていません
- 500P
効率的なソートプログラムについて
- 500P
作成したプログラムがやたら処理が重くなってしまい効率的なプログラムをお聞きしたくて質問させて頂きます。
phpとmysqlで組んでいまして
内容としましては
投稿ID
時間
メーカーID(1~50程度)
機種ID(メーカーごとに1~80程度)
機種名(個別の機種名で名前は他とかぶりません。保存していますがメーカーIDと機種IDごとの(50×80程度の個別の機種名を毎回保存しなおしてます)
地域(大まかに8地域程度に分かれています)
台数
の6つのデータを含むデータベースのデータを引っ張り出してきて、
機種名と地域が一致する場合 台数を合計、時間を新しい物を適用(メーカーIDと機種名、地域も一応再保存) という合体した配列を保存して時間が新しい順に表示してます。
- sql = select * from DB名 order by 時間
- として600ぐらい入っている列を
- $y = 0;
- ($limeには配列は行ってます)
- while($row=mysql_fetch_array($line)) {
- for($x=1;$x <= $y;$x++){
- // 機種名が同じで
- if($rowh[2][$x] == $row[2]){
- // 地域も一緒なら
- if($rowh[3][$x] == $row[3]){
- // 件数追加
- $rowh[30][$x] = $rowh[30][$x] + 1;
- // 台数を他のものと合計
- $rowh[6][$x] = $rowh[6][$x] + $row[6];
- // 時刻が新しい物があればそちらの時刻を保存
- if($rowh[13][$x] < $row[13]){
- $rowh[13][$x] = $row[13];
- }
- // 機種と地域が一緒ですよというフラグ
- $check = 1;
- }
- }
- }
- // 機種と地域が一緒じゃなければ新しい列として保存していく
- if($check != 1){
- $y = $y + 1;
- $rowh[2][$y] = $row[2];
- $rowh[0][$y] = $row[0];
- $rowh[1][$y] = $row[1];
- $rowh[3][$y] = $row[3];
- $rowh[4][$y] = $row[4];
- $rowh[5][$y] = $row[5];
- $rowh[6][$y] = $row[6];
- $rowh[9][$y] = $row[9];
- $rowh[10][$y] = $row[10];
- $rowh[12][$y] = $row[12];
- $rowh[13][$y] = $row[13];
- $rowh[16][$y] = $row[16];
- $rowh[17][$y] = $row[17];
- $rowh[19][$y] = $row[19];
- // rowh[2][$t]の機種が何件出ているかをrowh[30]に保存していく
- $rowh[30][$y] = 1;
- // (すいません色々他のデータも保存しちゃってます。一応16がメーカーID17が機種ID。途中で出てきてますが2が機種名、地域が3、時刻が13になってます。)
- }
- $check = 0;
- // whileのデータベースの回転 ここまで
- }
このようなプログラムを組んでいるのですがあまり効率的なプログラムの組み方を知らない故に無駄に600×600回ぐらい回転しちゃってます。
今後長い目ではデータ数が2000近くまで行く予定もあるため現時点で重く感じているので厳しいと思い質問させて頂きました。
ポイントとしましては
・メーカーID、機種IDごとに個別の機種名が特定されますので sqlで引っ張る段階でメーカーID、機種ID、地域でソートしたデータにしておけば隣と比べるだけで済む?(その代わり再度時間順に並べなおす必要がある。)
・時間順で引っ張ってきてから機種名同じものを集めるのと機種名をできるだけ寄せておいて比較量を減らしてから時間順に直すのだとどちらの方が早くなるか。
・またif文内で機種名(日本語で文字数長い)が同じ場合としてますがメーカIDと機種ID(両方とも数字)が同じ場合などとすると比較する文字列が長いのと2回比較するのではどちらが早くなるでしょうか?
・もしくは他に抜本的に効率的にできる方法や関数などがあったりしますか?基本的なforループで頑張ってるので^^;
少しでもタスクを減らして早く表示される物にしたいと思うのでアドバイス、ご意見をお願いいたします。
効率的なソートプログラムについて kurann [11月21日 19時01分] | セッションのタイムアウトについて | 質問一覧 | 携帯から画像をアップロードするには |




