如何在MySQL数据库中显示多个值?

如何在MySQL数据库中显示多个值?,sql,mysql,Sql,Mysql,我想知道如何在数据库中显示多个值。例如,假设您有一个用户,他将填写一张表格,要求他们键入他们喜欢的食物类型,例如饼干、糖果、苹果、面包等 我如何将其存储在MySQL数据库中的同一字段food下 野外食物结构会是什么样子?你可能想看看 您不希望在单个字段中存储多个值。您希望执行以下操作: form_responses id [whatever other fields your form has] foods_liked form_response_id food

我想知道如何在数据库中显示多个值。例如,假设您有一个用户,他将填写一张表格,要求他们键入他们喜欢的食物类型,例如饼干、糖果、苹果、面包等

我如何将其存储在MySQL数据库中的同一字段food下

野外食物结构会是什么样子?

你可能想看看

您不希望在单个字段中存储多个值。您希望执行以下操作:

form_responses
    id
    [whatever other fields your form has]

foods_liked
    form_response_id
    food_name
其中form_responses是包含单数项的表,比如一个人的姓名或地址,或者没有多个值的表。foods_liked.form_response_id是对form_responses表的引用,因此响应号为6的人员喜欢的食品在foods_liked中的form_response_id字段中的值为6。在那张桌子上,每个人喜欢的食物都有一行


编辑:其他人建议使用三表结构,如果您限制用户从预定义列表中选择食物,这肯定会更好。如果您允许他们输入自己的食物,那么三表结构可能会更好,不过如果您这样做的话,您会希望小心地规范您的输入-修剪空白、固定大小写等。这样您就不会在该表中出现重复的条目。

通常情况下,我们不会这样做。尝试使用关系表

表1:tbl_食品

ID    primary key, auto increment
FNAME varchar
表2:tbl_用户

ID   primary key, auto increment
USER varchar
表3:tbl_用户食品

RID      auto increment
USERID   int
FOODID   int
使用类似的格式来存储数据,而不是将数据块放入字段中

在这些表中查询也比解析数据块容易。

使用规范化


更具体地说,创建一个名为users的表。创建另一个名为“食物”。然后将这两个表与一个名为users-to-foods的多对多表链接在一起,该表相互引用外键。

一种方法是用编程语言序列化食品数据,然后将其存储在食品字段中。这将允许您查询数据库,获取序列化的食品数据,并将其转换回本地数据结构(在本例中可能是编程语言中的数组)

这种方法的问题是,您将一遍又一遍地存储大量相同的数据,例如,如果许多人喜欢cookies,字符串cookies将被一遍又一遍地存储。另一个问题是寻找每一个喜欢某种食物的人。为此,您必须为每个记录选择食物数据,取消序列化,并查看所选食物是否包含在其中。这是一个非常低效的方法

相反,您需要创建3个表:用户表、食物表和联接表。用户和食品表将分别包含每个用户和食品的一条记录。联接表将有两个字段:用户id和食物id。对于用户选择作为收藏夹的每种食物,它会向联接表中添加用户id和食物id的记录

例如,要使用id food_id提取所有喜欢特定食物的用户,您的查询将是:

SELECT users.id, users.name
FROM users, join_table
WHERE join_table.food_id = FOOD_ID
AND join_table.user_id = users.id;