1

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

餐厅是表名

{ID,名称,MenuType(),Items() }

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

例如:

麦当劳将有 3 种不同的 MenuTypes():“早餐”、“汉堡”、“甜点”,其中每个菜单中都有 X 数量的项目

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

在 Phpmyadmin 中,我将如何将它们存储为?只有varchar?

以及如何通过 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 回答