Php 如何将表单中复选框的值保存到单个MySQL字段中?
我有一种形式,我有很多音乐流派。一个艺术家可以用多种体裁唱歌。我已经在复选框中输入了这些类型。现在我需要将复选框的值存储到单个字段中Php 如何将表单中复选框的值保存到单个MySQL字段中?,php,sql,mysql,html,Php,Sql,Mysql,Html,我有一种形式,我有很多音乐流派。一个艺术家可以用多种体裁唱歌。我已经在复选框中输入了这些类型。现在我需要将复选框的值存储到单个字段中 由于我不熟悉php编程,有人能帮我解决一些代码片段吗?为什么要在一个字段中存储多个值?这将使搜索/检索变得不必要的痛苦 每个流派使用一个字段,或者最好仍然使用“流派”表和“艺术家流派”查找表。您可以使用/,但不应将序列化数据保存到数据库 您将无法在其上使用数据库功能(搜索、排序等),即您可以序列化数据,例如: <input type="checkbox" n
由于我不熟悉php编程,有人能帮我解决一些代码片段吗?为什么要在一个字段中存储多个值?这将使搜索/检索变得不必要的痛苦 每个流派使用一个字段,或者最好仍然使用“流派”表和“艺术家流派”查找表。您可以使用/,但不应将序列化数据保存到数据库
您将无法在其上使用数据库功能(搜索、排序等),即您可以序列化数据,例如:
<input type="checkbox" name="genre[]" value="Genre1"/>
<input type="checkbox" name="genre[]" value="Genre2"/>
<input type="checkbox" name="genre[]" value="Genre3"/>
您可以通过以下方式获取数据:
$genres = unserialize($serializedGenre);
一般来说,你不应该这样做。您的数据库不会是这样的,这将使在类型字段上构建查询变得困难 如果您有一个名为
artists
的表和一个名为genres
的表,这将是一个更好的主意。然后,您可以在另一个表artists\u genres
中定义艺术家和流派之间的关系,该表只包含一个artist\u id
和一个genre\u id
。你仍然可以为同一个艺术家创作多种风格的作品
例如,考虑下面定义的表结构:
TABLE artists
-------------
artist_id name surname
1 Alicia Keys
2 Mariah Carey
...
TABLE genres
------------
genre_id name
1 R&B
2 pop
3 hip hop
4 dance
...
TABLE artists_genres
--------------------
artist_id genre_id
1 1
1 2
1 3
2 1
2 2
2 4
...
在这种情况下,您将能够构建简单的查询,例如:
SELECT
artists.name, artists.surname
FROM
artists
INNER JOIN
artists_genres ON (artists_genres.artist_id = artists.artist_id)
INNER JOIN
genres ON (genres.genre_id = artists_genres.genre_id)
WHERE
genre.name = 'pop';
如果艺术家的类型存储在
artists
表中的单个字段中,则很难实现上述目标。除了困难之外,它可能速度慢且效率低,特别是当您有许多记录时。MySQL有一种数据类型,可以很好地将一组复选框存储在一列中。欢迎使用Stack Overflow,Reagan:)
SELECT
artists.name, artists.surname
FROM
artists
INNER JOIN
artists_genres ON (artists_genres.artist_id = artists.artist_id)
INNER JOIN
genres ON (genres.genre_id = artists_genres.genre_id)
WHERE
genre.name = 'pop';