如何在数据库中存储数组?

时间:2015-04-10 12:54:27

标签: php mysql arrays phpmyadmin

我正在尝试学习php数据库,我有一个问题。如何在数据库中存储数组?我在stackoverflow上看到了一个答案,他们正在做类型为double的事情,而在另一个答案中,他们讨论的是为每个用户创建一个表,但我无法找到解决方案。

如此总结。我想将数组存储在数据库中。我有访问phpmyadmin所以我可以设置值类型。我希望将该数组存储在一列中。

有人可以帮我解决问题吗?

编辑一个:我要存储的内容是音乐标签。所以在代码中它会是这样的:

 array('pop','rock','country');

我想将它存储在一个列中,以便于搜索

6 个答案:

答案 0 :(得分:4)

不是存储数组,而是试试这个:

表'类型':

id | name
1  | pop
2  | rock

表'歌':

id | ...
1

表'songs_genres':

song_id | song_genre
1       | 1
1       | 2

使用JOIN来获取每首歌曲(或其他)的流派

答案 1 :(得分:2)

serialize()是这里的一个选项。您可以将PHP数组序列化为字符串以存储在数据库中,当您从数据库返回字符串时,您可以unserialize()将其从字符串转换回数组。

[编辑]

在您使用您计划存储的数据示例更新问题之后,在实际数据库结构中使用MANY:MANY关系是正确的方法,如@Alex M' s answer

答案 2 :(得分:1)

通常,您不应将数组存储在db中的单个列中。最好有一个带有标签的表和另一个将您的实体与其标签链接起来的表。因此,在尝试将数组存储在表中之前,只需考虑在特定情况下是否真的是正确的(通常不是)。

如果您确定要这样做,那么您将拥有serialize ans unserialize个功能。

答案 3 :(得分:0)

每个用户都可以拥有一个或多个音乐标签。以后他们想要添加或删除这些标签。如果将所有标记存储在一列中,则几乎不会使用字符串操作而不是数据库操作。创建新表tbl_user_music_Tags并将每个标记与用户ID一起保存。通过这种方式,您可以充分灵活地为特定用户添加,删除,更新和读取标记。

答案 4 :(得分:0)

你可以使用json_encode从数组中创建一个json字符串,如下所示:

    $jsonarray = json_encode($array);

然后在检索信息后解码它。

    $array = json_decode($jsonarray, true); // the true will turn it into an array, 
    otherwise it's an object.

但我建议不要这样做。尝试创建一个具有适当列的数据库,并将数据存储在那里。

答案 5 :(得分:0)

您可以将其存储为字符串,例如'rock,pop,foo,...'。 但是如果你想管理标签,我认为你应该像@Alex M建议的那样在其他表中存储标签。