【问题标题】:Distributing HTML form data across multiple MySQL database tables跨多个 MySQL 数据库表分布 HTML 表单数据
【发布时间】:2018-07-31 21:48:16
【问题描述】:

我有一个带有 <select> 列表的 HTML 表单。这个列表有很多选项(超过 200 个),但为了简单起见,我们假设有四个。

<input type="text" name="country" placeholder="&nbsp;your name">

<input type="email" name="email" placeholder="&nbsp;your e-mail">

<select>
  <option value="skateboard">skateboard</option>
  <option value="scooter">scooter</option>
  <option value="parkour">parkour</option>
  <option value="bmx">bmx</option>
</select>

目前使用 PHP 处理用户数据并放入通过 phpMyAdmin 访问的 MySQL 数据库。

这很好用。一张表在三列中收集所有用户数据——姓名、电子邮件和选项。

问题在于每个选项代表公司的不同部门,并​​且将所有选项放到同一个表中需要手动排序。

一名员工对表格进行分类,删除所有“滑板”条目并将它们发送给适当的团队。 “scooter”、“parkour”和“bmx”的剪切/粘贴过程相同。所以这张表是手动分成四部分的。

我的目标是去掉手动排序组件,自动化整个过程。

我想我们可以改为有四个不同的表,一个专用于每个选项。当接收到“skateboard”条目时,数据将被放入表 1,“scooter”进入表 2,等等。不再需要人工干预。

我可以设想一个笨重且臃肿的 PHP 脚本来处理这项工作,但我认为 MySQL 提供了一个更有效的解决方案。

不幸的是,我在 MySQL 方面的经验非常有限。在MySQL Reference Manual 中寻找“正确”的起点至今没有结果。我在寻找什么规则或程序?

【问题讨论】:

  • 我不明白当存在 WHERE 语句时需要将相似的数据排序到不同的表中。
  • 这些条目需要进入不同表的原因是什么?您可以使用select name, e-mail from table where option = 'bmx' 或其他方式轻松过滤主表(并为它们构建单独的 php 页面)
  • 当你有 20 个选项时会发生什么?或 200 个选项?你真的会有200张桌子吗?每个选项一个表没有意义。
  • 另外,phpmyadmin 永远不应该是最终用户查看数据。 phpmyadmin 应该只为 projdeveloper/administrator 保留。
  • 感谢大家的反馈。已经很有用了。

标签: php html mysql database forms


【解决方案1】:

您可以使用 phpMyAdmin 搜索功能将结果限制为您需要的结果,并在需要时将其导出为 CSV,但是我认为问题在于您正在使用 phpMyAdmin 来查看您的数据。 phpMyAdmin 是一个真正的数据库管理工具。它充其量可以查看数据,而更糟糕的是危险。 (为了轻松删除你真正不应该删除的东西)

理想情况下,您需要的是一个 php 脚本,该脚本可以定位数据库中的条目并根据某些标准将它们列在 html 表中,然后您可以允许您想要查看的数据只查看他们应该查看的数据。

【讨论】:

  • PHP 脚本似乎是要走的路。我只是认为 MySQL 可能有一种更简单、更直接的方法(可能有——我仍然不知道——但 PHP 对我来说已经足够简单了)。
  • 这就是我的想法:为每个选项创建数据库表,然后使用这个 PHP 逻辑:if option="skateboard" then connect to table 1 if option="parkour" then connect to table 2
  • 部分是不好的做法,如果稍后您想添加更多活动会发生什么,您是否要制作更多表格并更改 PHP 代码?我会这样做。使用一个表,在表中为数据添加字段并确保您有一个活动字段,然后为活动列添加索引以加快搜索速度。然后使用 PHP 代码查找数据,例如 'select * from mytable where activity = "skateboard",这将允许您仅使用一张表并仅返回滑板活动。
  • 是的,这是一个不错的选择。事实是,我需要一个最多包含四个表的数据库(或者,如您所说,一个具有索引键的表)。谢谢。
【解决方案2】:

嗯,在这种情况下,我将创建两个逻辑表,即 MySQL DBMS 中的三个关系表。

在逻辑上:两个实体之间存在 n:m 关系,用户和选项(因为如果我理解正确,用户可以有多个选项,当然一个选项可以专用于多个用户)。

在关系意义上:由于存在 n:m 关系,因此您需要将其拆分为第三个表,其中外键和主键是选项和用户的外键。

所以最后你可以有三个表(例子):

选项:

  • PK:option_id
  • 男:姓名
  • M:日期

用户:

  • PK:用户 ID
  • 姓名

Options_Users:

  • PK 和 FK:options_id
  • PK 和 FK:users_id

PK:主键 男:强制 FK:外键

然后,您可以使用 WHERE 和 JOIN 命令(查找示例)通过 PHP 获取所需的所有数据。 phpMyAdmin 几乎只用于检查数据并可能手动创建表。所有真正的管理操作都可以并且应该通过脚本(在本例中为 PHP)来处理。

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多