お世話になります。
現在商品のデータベースを作っているのですが、商品とそのカテゴリをデータベース上でそれぞれ別のテーブルにて保存しています。
【商品】
番号 商品名 カテゴリ
1 パソコン 1
2 洗濯機 2
3 車 3
【カテゴリ】
番号 カテゴリ名
1 OA機器
2 家電
3 大型
カテゴリ数が200ほどあり、毎回ページを読み込ませる際に、カテゴリ名を表示させるためにカテゴリテーブルのすべてのデータをSELECTで抽出し、
$category[1] = "OA機器";
$category[2] = "家電";
$category[3] = "大型";
というように配列に入れた後、カテゴリ名を表示させているのですが毎回ページ移動をするたびに再読み込みが必要なため、メモリを無駄に消費してしまっているように思えます。
そこで質問です。
・毎回のロードをやめSESSIONなど一時的に入れたほうがレスポンスは良いのでしょうか?
・または手動にはなりますがデータベースをやめて、カテゴリだけで一つファイルを作りその中に上記の配列を記述し、requireなどで読み込む方が良いのでしょうか?
上記のカテゴリ分類以外にも「色」や「大きさ」などでも細かく分類したく、頭を抱えています。
よいカテゴリ分岐方法等ありましたらご教授いただけると幸いです。
どうぞよろしくお願い致します。
No.3ベストアンサー
- 回答日時:
>毎回ページ移動をするたびに再読み込みが必要なため、メモリを無駄に消費してしまっているように思えます。
まぁカテゴリ一覧の表示ページ以外で「全部のカテゴリ名」を取ってくるのは無駄でしょうね。商品と結合させてカテゴリを取ってくれば、その商品を表示するときに必要なカテゴリ名は(商品と同時に)取ってこれますから。何のためにデータベースを使っているのかという話になります。
>カテゴリ2つにまたがる場合があり、そのカテゴリIDは「1,2」というようにカンマ区切りでデータを格納しています。
設計からやり直した方が(結果的に)いいと思います。
単純に使うだけの文字列なら取得後に分割したりも何てことはありませんが、他のテーブルと関連付けるものをそういう格納をしてはダメです。最大いくつのカテゴリに属するようにするかを決めてその数のカテゴリID列を持つべき(2つめ以降、空きの場合はNULLを許可する)。
No.2
- 回答日時:
・毎回のロードをやめSESSIONなど一時的に入れたほうがレスポンスは良いのでしょうか?
確かにレスポンスは "多少は" 向上すると思いますが、セッションに入れるのは「user_id」のような個人識別に必要な最低限の情報だけに限定したほうが、データベースの役割としては合っています。一時的にセッションにキャッシュを作るような状態だと、データベース側で変更が行われたときにそれを検知してセッションに代入しなおすという面倒なステップが増加します。それを実装する気があるならばセッションに他のデータを入れちゃってもいいとは思いますが・・・
カテゴリを "たった" 200件SELECTするだけでそんなに時間かかりますかね?5000件とかなら遅くなることも考慮すべきだと思いますが、200件ってそんなに多い数字ではないような。
・または手動にはなりますがデータベースをやめて、カテゴリだけで一つファイルを作りその中に上記の配列を記述し、requireなどで読み込む方が良いのでしょうか?
PHPファイルからデータベースに切り替えることはあると思いますが、逆にするメリットはほとんどないでしょう。
PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71
FIND_IN_SET
http://c-brains.jp/blog/wsg/10/05/17-175025.php
$targets = array(1, 2); // 選択するカテゴリ
$sql = 'SELECT * FROM goods';
if ($targets) {
$wheres = array_fill(0, count($targets), 'FIND_IN_SET(?, category)');
$sql .= ' WHERE ' . implode(' OR ', $wheres);
$stmt = $pdo->prepare($sql);
$stmt->execute($targets);
} else {
$stmt = $pdo->prepare($sql);
$stmt->execute();
}
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- 教えて!goo ベストアンサー表示なのに回答受付中 4 2023/06/17 18:48
- その他(開発・運用・管理) 社内サイトのコンテンツのカテゴリ分けについて教えてください。 いま、社内向けポータルサイトを直そうと 1 2023/04/18 23:08
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- その他(Microsoft Office) Microsoft Edgeの「関心のあるカテゴリ」を表示させるには。 1 2023/03/16 18:05
- Excel(エクセル) Excel2016 行間を詰めたい&同じカテゴリなら上位2つだけを表示したい 5 2022/06/03 12:19
- その他(IT・Webサービス) Yahoo!知恵袋でアダルトというカテゴリを選択せずに性の質問をしたいのですが4つの質問中4つとも1 2 2023/04/09 11:30
- その他(病気・怪我・症状) お薬手帳の連絡先は自分のケータイ番号を記入しても良いのでしょうか? カテゴリ間違えてたらごめんなさい 2 2022/04/28 16:25
- OCN光 LANケーブルのカテゴリについて 今更ですが最近、ADSLから光回線にしました。Wi-Fiではなく、 3 2023/01/20 16:15
- メルカリ PayPayフリマで商品をコンビニで発送している間に取引がキャンセルされてしまいました。 PayPa 1 2023/04/29 19:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<VB.NET>INSERT文でDBにデータ...
-
JAVA SQLServerException 列名 ...
-
Pro*Cの構文エラー
-
ResultSetインターフェイスでの...
-
CakePHPでquery()を使うときに...
-
PHP初心者です。syntax error, ...
-
PHPのUndefined index や varia...
-
php postgres Insert と updat...
-
insert1つの処理でもトランザ...
-
phpでforeach ($stmt as $row)...
-
VB.NETでSQLを作る時のカンマの...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
VB.NET
-
SQL文が実行できません
-
while文の中にwhile文を書きた...
-
in 'where clause'のエラーの理由
-
SQL文2つ実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
<VB.NET>INSERT文でDBにデータ...
-
データベースに存在するデータ...
-
ResultSetインターフェイスでの...
-
C# で発生したException.Messag...
-
Q&Aサイトを作成していてURLの...
-
VBA ACCESS SQL...
-
MySQLのINSERT時にたまに重複に...
-
INSERT,DELETEを同時に
-
【初歩】配列の格納データ数だ...
-
PHP&MySQLでの文字列+数列の一...
-
php postgres Insert と updat...
-
VB.NET エラーになる箇...
-
OR検索を実装したい
-
PHP初心者です。syntax error, ...
-
mysqliを使ってデータベースを...
-
like検索の複数キーワードで、...
-
CakePHPとMySqlを使用していま...
おすすめ情報