【问题标题】:Store Arrays in a Mysql database, from a Max ammount of Items从最大数量的项目中将数组存储在 Mysql 数据库中
【发布时间】:2013-06-24 22:47:08
【问题描述】:

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

Restaurants是表名

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

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

例如:

麦当劳有 3 种不同的 MenuTypes(): "Breakfasts","Hamburgers","Desserts" 他们有 X AMMOUNT 每个菜单中的项目

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

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

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

非常感谢!

【问题讨论】:

  • 那么,您永远不需要按菜单类型或项目进行查询?

标签: php mysql sql phpmyadmin


【解决方案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(),你可以做这样的事情.. 不是最好的方法,但meh

$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
     }
}   

【讨论】:

    【解决方案2】:

    查看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 进行过滤客户端或类似的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-30
      • 2013-08-14
      • 2023-04-03
      • 1970-01-01
      • 2012-03-07
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多