2011-09-29 48 views
1

私はカートに製品を格納する少し複雑な方法でショッピングカートに取り組んでいます。ユーザがこのようなテーブルがあるカートに追加することができ、各製品について複雑なショッピングカートのデータベースに値を格納する方法

:この表で

enter image description here

ユーザが指定したサイズと色の数量を入力します。この値を後で簡単に取得して表示できるように、この値をデータベーステーブルに保存するにはどうすればよいでしょうか?

私はPHPとMySQLデータベースを使用しています。

私のテーブルは以下のようになりますが、誰かが色ごとに複数のサイズを要求したときに値を取得できません。

CREATE TABLE IF NOT EXISTS `site_platform_cart` (
    `cart_id` int(10) unsigned NOT NULL auto_increment, 
    `cart_product_id` int(10) unsigned NOT NULL, 
    `cart_product_name` varchar(256) collate latin1_general_ci NOT NULL, 
    `cart_product_photo` varchar(256) collate latin1_general_ci NOT NULL, 
    `cart_product_color_name` varchar(128) collate latin1_general_ci NOT NULL, 
    `cart_product_color_image` varchar(128) collate latin1_general_ci NOT NULL, 
    `cart_product_color` tinyint(4) NOT NULL, 
    `cart_product_size` tinyint(2) NOT NULL, 
    `cart_product_quantity` tinyint(3) unsigned NOT NULL, 
    `cart_product_price` varchar(12) collate latin1_general_ci NOT NULL, 
    `cart_date` date NOT NULL, 
    `cart_user_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`cart_id`) 
) ENGINE=MyISAM 

ありがとうございます。

+0

詳細を取得して表示するには、後でどれくらいの時間が必要ですか?そして、どんな目的のために? –

+0

色/サイズの組み合わせによって価格が異なりますか?これは、テーブルの構造を決定するのに役立ちます。 –

+0

DJ Quimby - 色やサイズにかかわらず、同じ価格があります。 – Psyche

答えて

1

これは私がどうなるのかです:

は各色/サイズの組み合わせのためのデータベースに新しい行を追加します。したがって、このような何か:

INSERT INTO chart (user_id,item_id,color,size,quantity,cart_date) VALUES (..... 

あなたは可能性も、より良いアイデアかもしれません、$_SESSION内のグラフアイテムを追加します。この方法であなたのデータベースは汚染されていません。

1

私はデータベース内のこのデータをペアで正規化します。ユーザー、製品、色、サイズ、注文数量の列があります。あなたが掲示したUI上の各四角は、データベース内の行になります。

これは、製品、色、サイズなどを簡単に追加できるように柔軟性があります。ユーザー、製品、色などのクエリはすべて簡単になります。

+0

入力マイクをありがとう。私は現在のテーブル構造で自分の投稿を編集しましたが、これが最良の選択だとは思わない理由もあります。 – Psyche

+0

色ごとに複数のサイズを要求すると、テーブル内に複数の行があることを意味します。あなたは "レッド、サイズ2"と "レッド、サイズ3"の別の行の行を持っています。 –

+0

マイク、私はあなたに同意し、あなたが私の構造が非常に多くの方法に似ていることがわかります。しかし、私は色ごとに複数のサイズのために量を入力した人がいるときに問題があります。私はそれを入手して表示する方法を知らない。 – Psyche

0

最善の方法はありません。私は可能なすべての色を格納するテーブルを使用します。すべての可能なサイズを格納する2番目のテーブル。 3次テーブルには、サイズとカラーテーブルの数量と参照が含まれます。

1

あなたのカートは、受注を表すものに過ぎません。受注を表すには、最低2つのテーブルが必要です.1つは全体指図に関する情報を含み、もう1つは指図のすべての行に関する情報を含みます。

「アイテム」テーブルがあり、色/サイズの組み合わせごとに各アイテムのキーが異なることを願っています(言い換えれば、各色とサイズの組み合わせは別の製品です)。

そうであれば、他の店舗の場合と同様に、品目番号と数量を注文のラインテーブルに保存するだけです。

+0

ショッピングカートの機能性(私の経験はあまりありません)では、一時的なデータはどのように保存されていますか?私は注文が確定するまで、データベースに詳細を格納することが最良の方法だとは思わないでしょう。結局のところ、彼らは注文しないことを決定するかもしれません、あなたが確認の前に挿入する場合、あなたはデータベースから '注文'を削除する必要があります。それとも私はここ全体のページにいますか? –

+0

確認の前にデータベースにデータを保存するかどうかは、要件の決定です。放棄された注文を追跡したい人もいます。その場合は、「isSubmitted」と呼ばれるフィールド、またはデフォルトで0になり、注文が確定したときに1に設定されるフィールドを持つことができます。 –

+0

ええ、それは理にかなっています。説明をありがとう。 DBデザインの点でこれと同様の問題を扱ってきましたが、実際にカート機能には取り組んでいません。 –

0

さて、ここで達成しようとしていることを正確に検討した上で、私は2セントの価値を置くつもりです。

私が思うように、最も重大な問題は、あなたがデータベースを設計した方法です。私は前に同じような問題に対処しなければならなかった、そしてどのような最終的には溶液としたことは、このようなものだった:ColoursSizesテーブルはあなたのprodutの範囲内で利用可能なすべてのサイズと色を保存

table: Colours 
    ColourID* | ColourDescription 

table: Sizes 
    SizeID* | SizeDescription 

table: GenericItem 
    GenericID* | Item Description | Price | Etc 

table: Item 
    ItemID* | ParentItem | SizeID | ColourID | AvailableStock | Etc 

GenericItemテーブルには、在庫している各製品が保管されています。たとえば、Joe Bloggs V-NeckのTシャツです。最後に、Itemテーブルには、それぞれユニークアイテムが格納されています(例:Large Red Joe Bloggs V-Neck T-Shirt)。一意の商品IDを指定し、GenericItemテーブルから追加情報を簡単に参照することができます。

は今、カートの面で、あなたは、このようなのようなテーブルを持つことができます。

table: Cart 
    CartID* | CartUserID | CartDate | Etc 

このテーブルには、各特定のカートのための情報を保持します。あなたはるかに正規化され、容易にアクセスしてデータを保持し、この方法で

table: CartLine 
    CartLineID* | CartID | ItemID | Quantity | Etc 

、およびデータベース内の各カートを保存することができます:そして今、Topenerの答えに拡大し、あなたは別に、各カートのラインのための情報を保持します。

このデータを取得するには、CartID$_sessionの中に保存し、そのすべてのクエリに基づいて行う必要があります。たとえば、次の行を並べ替える場合:SELECT * FROM CartLine WHERE CartID = $_SESSION['CartID']

グリッドを表示するには、SELECT * FROM Item WHERE ParentItem = 'GenericID'のような配列を作成するだけです。この例では、ジェネリックアイテムのIDが、ページ上のすべての情報を表示するための変数として既に存在していると仮定します。次に、そこの情報を使用して各テキストボックスを配列のインデックスにマップすることができます。

うまくいけば、これは正しい方向にあなたを指し示すでしょう。

関連する問題