商品データベースのカテゴリ表示方法について

このQ&Aのポイント
  • 商品データベースのカテゴリ表示において、ユーザビリティとパフォーマンスの向上を考慮した方法を検討しています。
  • 現在、カテゴリテーブルのデータをSELECTして配列に格納し、ページ移動ごとに再読み込みしていますが、メモリの無駄遣いとなっています。
  • 代わりに、SESSIONを使用した一時的な保存やカテゴリ情報をファイルに保存してrequireで読み込むなどの方法を検討しています。カテゴリ分岐方法についてもアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

カテゴリの表示方法について

お世話になります。 現在商品のデータベースを作っているのですが、商品とそのカテゴリをデータベース上でそれぞれ別のテーブルにて保存しています。 【商品】 番号  商品名  カテゴリ 1     パソコン   1 2    洗濯機    2 3    車      3 【カテゴリ】 番号 カテゴリ名 1 OA機器 2   家電 3   大型 カテゴリ数が200ほどあり、毎回ページを読み込ませる際に、カテゴリ名を表示させるためにカテゴリテーブルのすべてのデータをSELECTで抽出し、 $category[1] = "OA機器"; $category[2] = "家電"; $category[3] = "大型"; というように配列に入れた後、カテゴリ名を表示させているのですが毎回ページ移動をするたびに再読み込みが必要なため、メモリを無駄に消費してしまっているように思えます。 そこで質問です。 ・毎回のロードをやめSESSIONなど一時的に入れたほうがレスポンスは良いのでしょうか? ・または手動にはなりますがデータベースをやめて、カテゴリだけで一つファイルを作りその中に上記の配列を記述し、requireなどで読み込む方が良いのでしょうか? 上記のカテゴリ分類以外にも「色」や「大きさ」などでも細かく分類したく、頭を抱えています。 よいカテゴリ分岐方法等ありましたらご教授いただけると幸いです。 どうぞよろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

>毎回ページ移動をするたびに再読み込みが必要なため、メモリを無駄に消費してしまっているように思えます。 まぁカテゴリ一覧の表示ページ以外で「全部のカテゴリ名」を取ってくるのは無駄でしょうね。商品と結合させてカテゴリを取ってくれば、その商品を表示するときに必要なカテゴリ名は(商品と同時に)取ってこれますから。何のためにデータベースを使っているのかという話になります。 >カテゴリ2つにまたがる場合があり、そのカテゴリIDは「1,2」というようにカンマ区切りでデータを格納しています。 設計からやり直した方が(結果的に)いいと思います。 単純に使うだけの文字列なら取得後に分割したりも何てことはありませんが、他のテーブルと関連付けるものをそういう格納をしてはダメです。最大いくつのカテゴリに属するようにするかを決めてその数のカテゴリID列を持つべき(2つめ以降、空きの場合はNULLを許可する)。

その他の回答 (2)

noname#244856
noname#244856
回答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));

回答No.1

SQLでJOIN使うのが一番楽。

news_0203
質問者

補足

早速回答ありがとう御座いました。 先ほどJOINで試したところ処理速度も大変早く問題なく実装できそうです。 ただ一点、カテゴリ2つにまたがる場合があり、そのカテゴリIDは「1,2」というようにカンマ区切りでデータを格納しています。 この時カテゴリID1,2の「OA機器」「家電」の2つのカテゴリを同時にもってくることは可能でしょうか?

関連するQ&A

  • Accessで商品分類毎に自動採番を行う方法

    access初心者です。過去ログも内容に合致するものがなかなか見つからなかったので、質問させていただきます。 現在商品テーブルを作成しています。 例えば下記のように商品カテゴリが分類されていて、小分類毎に商品を0001から自動で採番する方法をご教示いただけないでしょうか? 大分類  中分類    小分類     商品名   01家電  01映像家電 01テレビ     LCD-32 0001 LCD40 0002 | できればフォーム機能を使用してコンボボックスで大分類、中分類、小分類と選択していき、最後に商品を登録した結果としてLCD-32の商品コードは0101010001となるようにしたいのです。 どうぞ宜しくお願いします。

  • カテゴリのDB設計について

    お世話になります。 商品データとカテゴリテーブルをそれぞれ分けたデータベースを作っており、JOINで該当カテゴリ名を抽出しています。 しかし商品によって複数のカテゴリに属する(カンマ区切りで「1,2,3」というように現状格納しています)場合、それらのすべてを拾ってくることは可能でしょうか? またカテゴリひとつひとつに対して商品データ内にカラムを用意するべきでしょうか? select `shop`.no, left outer join list_category on `shop`.category=`list_category`.no (現状) どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • カテゴリー商品の前後ページを取得する方法

    あるカテゴリーの商品詳細ページで前後詳細ページへのリンクを設けたいのですが、 後ろページの取得は上手くいきますが、前のページの取得がうまくいきません。 カテゴリーと商品は別テーブルで関連付けテーブルで紐づけさせてます。 PHP+MySQLで構築中です。 ・カテゴリー関連付けテーブル(catgory_term) --------------- | category_id | id | --------------- ・商品テーブルテーブル(items) ----------------------- | id | title | url | ・・・・・・・・・ ----------------------- SQL文は下記のような感じです。(並び順でもSQL内容は変わります.。下記の例は商品ID降順) SELECT items.title,items.id,items.url,MIN(items.id) FROM category_term Left JOIN items ON category_term.id = items.id WHERE category_term.category_id = 'カテゴリーID' AND items.status = 'publish' AND items.id > '商品ID' お手数をおかけしますがご教授いただける幸いです。

    • ベストアンサー
    • MySQL
  • access97でのデータ利用方法について

    AテーブルのレコードとBテーブルのフィールドをリレーションさせる方法はあるのでしょうか やろうとしている事は、Bテーブルの各フィールドにはそれぞれの商品数量があって、そのフィールド(商品名)の単価をAテーブルから参照させたいのですが 主キーがAテーブルでは、商品名に出来そうですが、Bテーブルは、商品名が フィールドとなっているので 配列のような概念が利用できないかとも思ってマニュアル探してみましたが判りませんでした。それともデータベースの考え方が間違っているのでしょうか? ご存知の方いらっしゃいましたら宜しくお願いします。

  • 詳細データを常に同一スペースに表示する方法

    PHP+MySQLで商品データの表示ページを作りたいと考えています。 データベースには最低限下記のデータがあるという前提です。 「商品別番号、カテゴリ名、商品名、価格、画像ファイル名」 理想は、一つの画面内に 1.カテゴリ一覧表示 2.(↑のカテゴリ一覧からどれかを選択(クリック)した際)  そのカテゴリに属する商品名のみを10件表示 ※10件以上ある場合は「次ページ」等のリンクを表示 3.(↑の商品名のどれかを選択(クリック)した際)  該当商品の詳細表示 をすることです。 購入したPHPの参考書では、1.と2.を同一ページで表示するスクリプトはありましたが、3.に関しては詳細表示だけの別画面へ遷移させる仕組みになっていました。 これを2.で表示される商品名のどれかをクリックすると、同一ページ内の詳細表示部にその商品のデータが表示される(=詳細表示部の内容だけが切替わっていく)ようにしたいのですが、どの様な方法が考えられるでしょうか? イメージは↓の様な感じです。 ┌――――――┬―┐ │  ** 3 ** │*1*│ │(詳細表示を │ │ │  切り替え) │ │ ├――――――┴―┤ │   ** 2 **   │ └────────┘ 今、自力で考えている方法は、フレーム分割して上記「3」の部分に詳細表示用スクリプト(例:syousai.php)を固定し、そこに選択された商品のデータを渡す事ですが…。 勉強し始めのため、色々考えていて頭の中がごちゃごちゃになってきております。 フレームを使わない方法や、根本の考え方が間違っている等々、色々なご意見、ご教示を頂けるととても有り難く存じます。どうぞ宜しくお願い致します。 ※参考書のスクリプトは http://www.nishi2002.com/demo/6/shop.php?cateid=2 です

    • ベストアンサー
    • PHP
  • Accessでの顧客管理DB作成方法について

    Accessの中では非常に基本的な事ですので恐縮ですが、実際にデータベースを作成していて上手くいかないものでアドバイスをいただければ助かります。 使用バージョンは未だにAccess97です・・・ 2つのテーブルを使用して顧客の管理を行おうと考えています。 1つめのテーブルは「顧客情報」 2つめのテーブルは「保有商品」 といったもので 「顧客情報」テーブルには「顧客番号」「顧客名」「顧客住所」 「保有商品」テーブルには「購入日」「購入商品」 をまとめたいと思います。 入力フォームには --------------------------------------------------- 「顧客情報」テーブル 「顧客番号」「顧客名」 「顧客住所」 --------------------------------------------------- 「保有商品」テーブル 「購入日」「購入商品」 「購入日」「購入商品」 --------------------------------------------------- といった単票形式の1つのフォームで作成を考えています。 上記のデータベースを作成するにあたって効率的なリレーションシップやクエリーなどをご教授していただけませんでしょうか。 よろしくお願いいたします。

  • アクセスでの商品カテゴリの作成方法について

    アクセスで商品カテゴリを作成したいと思っています。カテゴリ区分は、大、中、小の3種類です。 カテゴリ大:本、雑貨 カテゴリ中:漫画(本)、雑誌(本)、インテリア(雑貨) カテゴリ小:バイオレンス(漫画)、少女まんが(漫画)、照明(インテリア) カテゴリの分け方は上記のような区切りになります。 商品カテゴリのテーブルを別で事前に作成し、商品テーブルで商品カテゴリを選択させるようにする為、ルックアップ機能を使いました。しかし、大・中・小が一度に表示されてしまい、リストが非常に長くなってしまいます。 そこで、カテゴリ大を選んだ後に、その大カテゴリに該当するカテゴリ中の選択肢のみ表示させたいと思います。 本を調べたのですが、載っているものが見つかりませんでした。何か良い方法があれば教えてください。 また、何か良い本があればお勧めを教えていただけますでしょうか。よろしくお願い致します。

  • phpmyadminを使って商品のカテゴリ分けをしたい。

    phpmyadminを使って商品のカテゴリ分けをしたい。 現在ネットショップのサイトを構築しています。 商品が5万件以上あるため、どうしてもカテゴリ分けをしないといけないのですが。。。 データベースに商品の情報を登録して、PHPで呼び出せるようにしておけばいいと漠然と考え、いろいろ調べてみたのですがPHP・phpmyadmin共にほぼ触った事すらないため苦戦しております。。。 EC-CUBEなどのシステムを使えば簡単にできるそうなのですが、勉強のためにも自分の手で作りたいと思っております。 細かく説明させて頂くと、例えば「食品」というカテゴリをクリックすると「食品」に関する商品ページがズラッと並ぶページ(YAHOOオークションのような)が作りたいと思っているのですが、そうなるためにどんな内容のデータベースを作ればいいのかわからないという感じです。 因みに現在手元にある資料として、全商品の商品ページと全商品のデータが入ったCSVファイルがあります。 汚い文章で申し訳ありませんが、お解かりになる方、是非回答お願いします。

  • Access クエリが入力できない

    Access 2003を使用しています 以前の担当のかたがつくったデータベースで、 会社で購入している薬剤を管理しているのですが、 これまでできたクエリの入力ができなくなってしまいましたので お力をかしてください。 テーブルA 管理番号 薬剤名 分類番号   ○ メーカー番号 ● 購入日 価格 テーブルB メーカー番号 ● メーカー名 テーブルC 分類番号   ○ 分類名 ○-○、●-●でリレーションシップでつなげています。 ある日、テーブルAのフィールドをいくつか増やしたところ テーブルA、B、Cをもとに作ったクエリの入力ができなくなってしまいました。 入力できるようにするにはどうすればよろしいでしょうか。 主キーは設定していません。 初心者なので、わかりやすく教えていただければうれしいです。

  • Access:テーブルの情報を参照して、フォームに反映させる方法

    Access : テーブルの情報を参照して、フォームに反映させる方法 はじめまして。Access初心者です。 データベースの参照の仕方について質問いたします。 現在、商品情報のデータベーステーブルがあり その中には「商品ID」「メーカー名」「商品名」、3つのフィールドがあります。 ここから、入庫テーブルを作るために 入庫フォームに「商品ID」を入力すると 自動で「メーカー名」「商品名」が表示され 最後に「入庫数」を入力すれば、入庫テーブルが完成するようにしたいです。 例) データベーステーブル 商品ID  メーカー名  商品名 1      A社      AAA 2      B社      BBB 3      C社      CCC 4      D社      DDD 上記のデータベースがあり 商品名「CCC」が100個入庫した際 入庫フォームに「3」を入力すると 「3」   「C社」   「CCC」が表示され 最後に、入庫数「100」を入力して、入庫テーブルの完了としたいです。 そこで、入庫フォームにデータベースの内容を反映させる仕方が分かりません。 どなたかご教授願えないでしょうか?