カレッヂ |
質問者 むす
投稿日 10/10(水) 16:54:22
簡易データベースにおいて、登録件数が多いために動作が重くなってきました。 そこで、データベースを軽くするために登録内容を英数字などに置き換えれないかと 思い、試行錯誤しています。 サンプルを例にすれば、 都道府県の所に 北海道 青森県 岩手県 ・・・ と入っていますが、これをCSVファイル上では 北海道を>01 青森県を>02 岩手県を>03 ・・・ と数字に置きかえ、CGIが検索結果を出力するときに再度 01を>北海道 02を>青森県 03を>岩手県 ・・・ と置きかえて表示するようにできないものでしょうか? これが出来れば、それまで1項目につき6バイト〜使用していた ところを1〜2バイトで済ませられると考えたわけです。 できるだけ自力で出来る範囲は編集しているのですが、ここまで くると自分の力ではサッパリわからず、どなたか教えていただければ 幸いです。他力本願で申し訳ありませんが、よろしくお願い致します。 |
回答者 らいらい
[削除]
投稿日 10/14(日) 15:40:33
簡易データベースのソースを詳しく見ていないので 正確なことは言えませんが、むすさんの質問のようなことは 以下のようにすればいいと思います。 フォームからの入力(登録、および検索)を、 <select name="PREF"> <option value="1">北海道 <option value="2">青森県 <option value="3">岩手県 (以下略) として、CSVに書き込むルーチンの変更はしない。 そうすると、ファイルには数字で情報が記入されます。 読み出すときに、ちょっとした工夫をして表示すれば大丈夫です。 CGIのファイルのメインルーチンより前のほうで @PREF_ARRAY = ('北海道','青森県','岩手県',・・<省略>・・,'沖縄県'); として配列を作成します。 画面に表示するときに、$PREF_ARRAY[$PREF] としてやれば、 うまく表示されるはずです。 また、過去のデータをそのままにしておきたい場合はもう一工夫必要です。 (北海道、青森県、という文字列データと1、2などの数字データが混在する場合) # 都道府県(一致) if ($FORM{'PREF'} ne 'all') { if ($PREF eq $FORM{'PREF'}) { ; } else { next; } } の部分を、以下のように変更 # 都道府県(一致) if ($FORM{'PREF'} ne 'all') { if (($PREF eq $PREF_ARRAY[$FORM{'PREF'}]) || ($PREF eq $FORM{'PREF'})) { ; } else { next; } } こんな感じでどうでしょうか。 |
質問者 むす
[削除]
投稿日 10/16(火) 09:20:51
ありがとうございます。ちょっと時間がかかるかもしれませんが、 やってみてまたお返事させていただきます! |
質問者 むす
[削除]
投稿日 10/17(水) 18:01:50
らいらい様、本当にありがとうございました。 おかげでデータ量を1/3程度に押さえることが出来ました。 検索も幾分か動作が早くなり、大満足です。 重ね重ね、ありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |