从最大数量的项目中将数组存储在Mysql数据库中

时间:2013-06-24 22:47:08

标签: php mysql sql phpmyadmin

这是该市的餐馆目录,每家餐厅都有菜单和存储的物品。

  

餐馆是表名

     

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

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

例如:

  

麦当劳会有3种不同的MenuTypes():   “早餐”,“汉堡包”,“甜点”,他们有X AMMOUNT   每个菜单中的项目

所以我需要MeuTypes()和Items()

的数组

在Phpmyadmin中,我如何存储这些?只有Varchar?

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

提前多多谢谢!

2 个答案:

答案 0 :(得分: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
     }
}   

答案 1 :(得分:0)

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

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

what's the point of serializing arrays to store them in the db?

虽然我会说,有更好的方法可以做你想要的......关系,但我不会告诉你如何构建你的数据库......

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

...即 如果你想过滤你会怎么做?或者搜索菜单数据???
你想要的方式,你将无法做到。

或者,它不是你不能,它只是涉及额外的步骤,而不仅仅是对数据库的查询,你将不得不反序列化数据,并使用Jquery或客户端过滤Jquery或类似的东西。

没什么大不了的......但是在开始序列化路线之前一定要考虑更好的结构。