【问题标题】:MySQL (involving arrays) Table Suggestion NeededMySQL(涉及数组)需要表建议
【发布时间】:2012-03-23 10:10:31
【问题描述】:

我正在尝试在收集用户姓名、电子邮件、地址和工作经验的网站上创建一个 PHP 表单。姓名、电子邮件和地址都非常简单,并且有自己的字段,但工作经验表由三个字段组成:“时间段”、“雇主”和“职位”,并且多行将由用户根据需要动态添加(在网站上使用 JavaScript 来完成此操作)。

我的问题是,在 MySQL 数据库中对此进行建模的最佳方法是什么?我是否只使用一张这样的表:

|用户名 |姓名 |电子邮件 |地址 |时间 |雇主 |职位 |

或者我应该像这样使用两个表:

|用户名 |姓名 |电子邮件 |地址 |

|用户名 |时间 |雇主 |职位 |

我的直觉告诉我,第二个解决方案可能是我需要的,因为我不知道如何将动态数组添加到数据库中。但是如何将第二个表的相同 UserId 关联到第一个表?如果我只使用一个表坚持第一个解决方案,是否可以将时间、雇主和职位数组保存在一个 UserId 下?请记住,我无法提前知道用户将创建多少行工作体验。

【问题讨论】:

    标签: mysql arrays database


    【解决方案1】:

    选项 2 是正确的,因为它会产生更少的冗余。

    表 1 |用户名 |姓名 |电子邮件 |地址 |

    表 2 |用户名 |时间 |雇主 |职位 |

    【讨论】:

    • 因此,如果 Bonnie 使用网站提交了 4 条就业记录以及她的姓名、电子邮件和地址,我如何将第二个表中的这 4 行链接到第一个表自动生成的 UserId(假设她的 UserId 是 10)?
    • 实际上它们已经通过 UserId 链接,使用 sql JOIN 您可以有效地生成视图,如 |用户名 |姓名 |电子邮件 |地址 |时间 |雇主 |职位 |
    • 正如 Lucy 所说,加入就可以完成这项工作。你可以找到关于 Joins 的教程here
    • 编辑:我会尝试更多地了解 JOIN!说这是Bonnie提交的,姓名:Bonnie,Email:Bonnie@mail.com,地址:芝麻街101号工作经历:1. 2000-2005,迪士尼乐园,米奇老鼠; 2. 2005-2009,尼克国际儿童频道,海绵宝宝; 3. 2009-2012,星巴克,文员。这是否意味着当提交表单时,她的所有三个就业记录都会自动获得 UserId 10?
    • 我有一种感觉,我可能没有清楚地表达自己。我试图弄清楚如何将不同用户提交的表单保存到我的数据库中。每个用户将生成多少行事先是未知的...
    【解决方案2】:
    Table 1     | UserId | Name | Email | Address |
    
    Table 2  |Id| UserId | Time | Employer | Position |
    

    选项 2 更好,如果您不想参与连接,只需从第一个表中获取 $userId 并在第二个表上执行单个查询(WHERE UserId = '$userId')。这将为您返回用户所有工作经验的数组。

    【讨论】:

    • 我还在想办法将这些记录保存到数据库中;所以有10个人在网站上填写了表格;第一人有8行工作经验,第二人有2行,第三人有4行……以此类推。第二个表如何知道哪些行属于哪个用户?
    • 第二个表中有“UserId”。所以第一个人在第二个表中将有 8 行,所有行都具有相同的 UserId(该人的 id)。在第二张表中插入数据之前,在第一张表中插入姓名、电子邮件、地址。然后对第一个表进行查询(WHERE Email = "他的电子邮件地址")。返回的数组将有一个 UserId 属性,将此属性保存在一个变量中,并对第二个表(WHERE UserId = $userid)进行第二次查询。我无法解释更多:P
    • 这就是我尝试使用 PHP 来保存记录的操作: INSERT into Table1 (name, email, address) VALUES ('Bonnie', 'bonnie@mail.com', 'Sesame Street 101'),第二个查询将插入 Table2(时间、雇主、职位)值('something'、'something'、'something')。你能告诉我如何遍历所有 8 行并将它们插入到第二个表中,并且所有的用户 ID 仍然与第一个表生成的用户 ID 相同吗?我仍然不确定 (WHERE Email = "email") 应该如何工作,因为我无法知道用户输入她的电子邮件时的电子邮件是什么:(
    • 在第二个表中插入任何内容之前,您会注意到该信息已插入到第一个表中,因此您可以在第一个表中查询插入的记录。您有电子邮件地址
    • 我想这是我不清楚的地方(我的错!)当用户从网站提交表单时,所有信息都应该自动保存到数据库中,作为用户输入并提交他们的数据。这就是我的问题所在......该网站将在线提供,我无法知道何时填写表格......
    【解决方案3】:
    Table 2  |Id| UserId | Time | Employer | Position |
    

    我猜这将是正确的选择.. 因为它会减少冗余。

    【讨论】:

      【解决方案4】:

      根据 Sevag Akelian 的回答,您需要使用 join 来获取数据。会是这样的

      select u.userid, time, employer, position from user as u left join
      user_experience as ue on u.userid = ue.userid
      

      如果您想获取特定用户的数据,只需使用条件

          select u.userid, time, employer, position from user as u left join
          user_experience as ue on u.userid = ue.userid
      where userid = 1 
      

      【讨论】:

      • 在提交表单时您能帮我处理 PHP 的“插入”语句吗?这就是我遇到麻烦的地方......
      • 您将不得不使用两个插入查询。首先是用户表,然后您需要获取用户 ID(最大 ID 或 mysql_insert_id 函数)。然后使用这个用户标识在 user_experience 表中插入记录。如果你能提供准确的表架构,我可以帮你
      • 抱歉我的回复晚了;离开了几天。按照佩德罗的要求,我将打开一个新线程。我已经弄清楚如何按照您的建议进行操作,但遇到了一个新问题。再次感谢 g.b.1981!
      猜你喜欢
      • 1970-01-01
      • 2011-05-02
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多