如何在MySql中存储多选选项以便于搜索

Posted

技术标签:

【中文标题】如何在MySql中存储多选选项以便于搜索【英文标题】:How to store multiple select option in MySql for easy searching 【发布时间】:2015-03-30 20:06:59 【问题描述】:

我不确定将多个选择选项存储到 mysql 中的最佳方法。最初,我创建了一个逗号分隔的选定值列表。我已经读到这是一种糟糕的编程习惯,并且很难弄清楚如何使用逗号分隔的 varchar 值(例如:1、5、17)来搜索我的数据库中的三列。似乎最好的做法是为上面的示例创建一个插入 3 条记录的第三个表。该表将通过 id 链接。

示例: 表 1(年龄级别)具有字段 id 和年龄级别(婴儿、青少年、成人) 表 2 有类 id 和类名 表 3 是存储 WHO 可以参加每个班级的多项选择选项。我猜这些字段是 id & classID & ageLevelID

我的问题如下: 1.如何有效地将这些数据插入到表2和表3中? 2. 例如,我如何将所有这些放在一起来搜索一个正在寻找只允许婴儿和青少年的课程的人?

关联 2 个表很容易,关联 3 个表是概念上的斗争。另外,我是否正确地将逗号分隔的值存储在一个字段中会带来麻烦?谢谢。

【问题讨论】:

欢迎享受JOIN的乐趣 我了解连接的概念...我的问题更多是因为我不使用 2 个表和逗号分隔的多项选择,而是使用第 3 个表。你同意我处理这个多选问题的方法吗?我需要 2 条 sql 语句来填充表 2 和 3 还是可以用一条 sql 语句来完成? 【参考方案1】:

表agelevel(ageid(唯一),agelevel)

表类(classid(唯一),类名)

表类信息(classid、fieldname、fieldvalue)

有了它,您可以拥有任何“字段名称”,例如年龄级别、详细描述、小时数等,然后是 fieldvalue 中该字段的值。这允许您的类将任何无限数量的变量附加到单个类 ID。

【讨论】:

字段名不应该是ageID,它会带来ageLevel吗?例如,如果有人提供允许 2 个年龄级别的类,我正在专门寻找将使用的 SQL。可以只用一条 SQL 语句将数据插入数据库吗?另外,当我需要搜索仅限成人的课程时,我该怎么做?引入第三张桌子给我带来了一些麻烦。 是的 fieldname 在我上面的例子中应该是 ageid。创建表格后,设置一些具有不同年龄级别的课程,您可以发布更多详细信息,以便我们为您提供准确的答案

以上是关于如何在MySql中存储多选选项以便于搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何使复选框作为多选选项?

vue多选,数据量大怎么

多选字段仅提交最后选择的选项

如何在多选选项中获取选定选项数据属性

RobotFramework Selenium:如何从多选下拉列表中选择多个选项?

如何在多选表单 laravel 中选择所有选项?