将数组存储在Mysql数据库中,从项目的最大弹药数开始


Store Arrays in a Mysql database, from a Max ammount of Items

这是一个城市餐厅的目录,每个餐厅都有菜单和项目存储在其中。

餐厅是餐桌名称

{ID,Name,MenuType(),Items()}

我想为添加到MysqlDB的每个餐厅存储不同的MenuTypes()。

例如:

麦当劳有3种不同的菜单类型():"早餐","汉堡","甜点",他们有X AMMOUNT每个菜单内的项目

所以我需要MeuTypes()和Items()的数组

在Phpmyadmin中,我将如何将这些存储为?仅Varchar?

我如何通过PHP(SQL)中的循环获得存储在MenuTypes()中的items()?

提前感谢!

与上面一样,您可能希望使用关系数据库。下面是一个粗略的想法。。"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
     }
}   

查看serialize()函数。。。。将数组序列化为文本的过程。。。

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

什么';序列化数组以将其存储在数据库中的意义何在?

尽管我会说,有更好的方法来做你想做的事。。。。关于关系,但我不会告诉你如何构建数据库。。。

但是Mysql是一个关系数据库,为什么不利用它呢。

即。。。如果你想过滤,你会怎么做??或者搜索菜单数据
按照你想做的方式,你做不到。

或者,这并不是说你不能,它只是涉及额外的步骤,而不仅仅是对数据库的查询,你必须取消数据的序列化,并用Jquery或类似的东西在客户端进行过滤。

没什么大不了的。。。。。但在开始序列化之前,一定要想一个更好的结构。