1

これは市内のレストランのディレクトリであり、すべてのレストランにはメニューとアイテムが保存されています。

レストランはテーブル名です

{ID,名前,メニュータイプ(),アイテム() }

MysqlDB に追加されたレストランごとに異なる MenuTypes() を保存したいと考えています。

例えば:

マクドナルドには、「朝食」、「ハンバーガー」、「デザート」の 3 つの異なる MenuTypes() があり、すべてのメニュー内に X AMMOUNT の項目があります。

だから私は MeuTypes() と Items() の配列が必要です

Phpmyadminでは、どのように保存しますか? ヴァルチャーのみ?

また、PHP(SQL)のループを介してMenuTypes()内に保存されているitems()を取得するにはどうすればよいですか?

よろしくお願いします!

4

2 に答える 2

1

上記のように、おそらくリレーショナル データベースを使用したいと思うでしょう。以下に大まかなアイデアを示します。「pk」=主キー、「fk」=外部キー。明らかに、他の重要なフィールドをいくつか省略しています

tblRestaurant
   pkRestaurant

tblRestaurantTypesItems
   fkRestaurant
   fldMenuType
   fldItem

アイテムを取得するには、次のようなクエリを実行できます

SELECT * FROM tblRestaurant R INNER JOIN tblRestaurantTypesItems RTI ON
               R.pkRestaurant=RTI.fkRestaurant ORDER BY R.pkRestaurant

私はこのクエリをテストしていませんが、それは大まかな考えです

これは、次のようなレコードセットを返します。

|Arbys    |Breakfast|EGGS
|Arbys    |Lunch    |Burger
|McDonalds|Breakfast|McMuffin
|McDonalds|Breakfast|Hashbrown
|McDonalds|Breakfast|Coffee
|McDonalds|Lunch    |Big Mac
|McDonalds|Dinner   |Fries

または、より具体的に取得したい場合

SELECT * FROM tblRestaurant R INNER JOIN tblRestaurantTypesItems RTI ON
               R.pkRestaurant=RTI.fkRestaurant WHERE R.pkRestaurant="McDonalds"
               AND RTI.fldMenuType="Breakfast"   

次の行に沿って何かを返します

|McDonalds|Breakfast|McMuffin
|McDonalds|Breakfast|Hashbrown
|McDonalds|Breakfast|Coffee    

編集:朝食、ハンバーガー、デザートの代わりに朝食、昼食、夕食を使用することで、「メニュータイプ」のOPの意味から逸脱したことに気付きました. 同じ考えでしょう。

したがって、PHP で $menuTypes() の配列があり、各タイプに $items() の配列がある場合、元の質問で述べたように、$menuTypes['breakfast'] = $breakfastItems() のように、このようなもの..それを行うための最良の方法ではありませんが、まあ

$restaurant = "McDonalds"
foreach ($menuTypes as $items){
    $menuTypeName = key($items); //not sure if key() works on elements of arrays
                                 // which are arrays themselves

     foreach($items as $item){
       //Assuming "McDonalds" Is already in tblRestaurant so we don't need to
       //insert it now
       $query="INSERT INTO tblRestaurantTypesItems VALUES('".$restaurant."',
              '".$menuTypeName."', '".$item."')"

        //execute query
     }
}   
于 2013-06-25T13:46:21.703 に答える
0

関数を調べてくださいserialize()....配列をテキストにシリアライズするプロセス...

http://www.webmaster-source.com/2009/02/15/php-serialize-function/

配列をシリアライズしてデータベースに格納するポイントは何ですか?

私は言いますが、あなたが望むことを行うためのはるかに良い方法があります....リレーションシップを使用しますが、データベースを構築する方法については説明しません...

しかし、Mysql はリレーショナル データベースなので、それを利用しない手はありません。

つまり... フィルタリングしたい場合はどうしますか?? または、メニューデータを検索しますか???
あなたがやりたいように、あなたはできないでしょう。

または、できないというわけではありません。データベースへのクエリだけでなく、追加の手順が必要になるだけです。データをシリアル化解除し、Jquery などを使用してクライアント側でフィルタリングを行う必要があります。 .

大したことではありません...しかし、連載ルートに着手する前に、より良い構造を考えてみてください.

于 2013-06-24T22:52:44.470 に答える