【问题标题】:Post data from an array to a database将数据从数组发布到数据库
【发布时间】:2020-03-13 17:26:35
【问题描述】:

我的数据库中有两张表,一张包含组,一张包含用户。用户甚至可以多次成为这些组的成员。

所以 users 包含“id”、“name”、“lastname”、“group”和其他一些不重要的 atm。表组只包含一个 id 和一个组名。这些组是动态的,有时会添加一个组,有时会删除一个组。

在前端,人们可以使用带有多选的表单将自己添加到组中

但我没有比这更进一步的了。我面临两个问题。从数组中收集的数据,因此将它们放入 SQL 查询中并不简单。 (我想将数组中的所有信息放入一个用“,”分隔的变量中)另一方面,也许这种表格格式不是最好的方法。

所以我想问你们什么。将表结构更改为什么更好? 如何将数组组合成一个变量,以便将它们放入数据库中(用“,”分隔)

编辑!:按照 Andy Hall 的建议,我创建了一个新表。 具有 id、werkgroep_id 和 user_id 的 werkgroep_user。

这就是我的选择的样子

<select id="testwerkgroep" name="testwerkgroep[]" multiple>
 <option value="">geen werkgroep</option>
 <option value="1">werkgroep 1</option>
 <option value="2">werkgroep 2</option>
</select>

现在我面临从数据库获取数据的问题。例如,我想要所有用户(名称)及其组(名称)

【问题讨论】:

  • 你能用你尝试过的东西来编辑你的帖子吗?
  • this table format isn't the best way to do so 是正确的。 stackoverflow.com/questions/3653462/… 回答 How do i combine an array into one variable so i can put them in the database (separated by ",") 虽然会是 implode。

标签: php sql arrays database data-structures


【解决方案1】:

看起来您的用户和组表具有多对多关系。 “许多用户可以属于许多组”。

如果不使用中间表解决多对多关系,您当然可以在users.group 字段中使用逗号分隔的字符串。您可以通过在您的组 ID 数组上使用 implode() 函数来实现:

$commaSeparatedGroupIdString = implode($groupIdArray);

当你从数据库中检索时,你可以将它们分解成一个数组:

$groupIdArray = explode($commaSeparatedGroupIdString, ",");

第二种(我会说更好)方法是解决与中间表的多对多关系。该表可以命名为group_assignments。一个user 可能有多个group_assignments,一个group 可能有多个group_assignments。

group_assignment 表的结构是:

id主键

user_idusers.id 字段的外键

group_idgroups.id 字段的外键

每当用户希望将自己分配到某个组时,他们都会进行提交,您的应用程序将在 group_assignments 表中创建一条新记录,其中包含用户 ID 和他们提交给自己的组 ID到。然后,检索用户的组分配信息需要在 SQL 中使用 JOIN 来获取所有关联的 group_assignment 记录给您的用户。删除分配就像删除 group_assignments 表中的相应记录一样简单。

【讨论】:

  • 好的,我稍后会尝试更好的选择。获取数据将需要 double JOIN 那么因为涉及三个表?由于数据是作为数组提供的,如果我理解正确,我需要在将单独的记录添加到中间表时执行 foreach 循环?
  • 是的,需要双连接才能通过中间表获取与您的用户关联的 group 记录。是的,每条记录一个 foreach 是一种可接受的方式。
猜你喜欢
  • 1970-01-01
  • 2018-01-02
  • 2017-02-07
  • 2016-10-22
  • 1970-01-01
  • 2016-12-02
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多