我有一个表格,我有很多音乐流派。艺术家可以在很多类型下演唱。我把这些类型放在复选框中。现在我需要将复选框的值存储到单个字段中。
有些人可以帮我解决一些代码片段,因为我是php编程的新手吗?
答案 0 :(得分:4)
一般来说,你不应该这样做。您的数据库不会是normalized,这样就很难在类型字段上构建查询。
如果您有一个名为artists
的表和一个名为genres
的表,那将是一个更好的主意。然后,您将在另一个表artists_genres
中定义艺术家和流派之间的关系,该表只包含artist_id
和genre_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
表中的单个字段中,则很难实现上述目标。除了困难之外,它可能会很慢而且效率低下,特别是如果你有很多记录的话。
答案 1 :(得分:2)
为什么要在单个字段中存储多个值 - 这会使搜索/检索不必要地痛苦。
使用每个流派的字段,或者更好地使用'genres'表和'artist_genres'查找表。
答案 2 :(得分:1)
您可以使用serialize / unserialize,但不应将序列化数据保存到数据库中。
您将无法使用数据库功能(搜索,订购等),即
答案 3 :(得分:1)
您可以序列化数据,例如:
<input type="checkbox" name="genre[]" value="Genre1"/>
<input type="checkbox" name="genre[]" value="Genre2"/>
<input type="checkbox" name="genre[]" value="Genre3"/>
PHP:
// Don't forget to escape the POST-values
$genre = serialize($_POST['genre']);
$query = "INSERT INTO database (genre) VALUES ('" . $genre . "')";
if(mysql_query($query)){
// Success
}
您可以通过以下方式获取数据:
$genres = unserialize($serializedGenre);
答案 4 :(得分:0)
MySQL有一个SET数据类型,可以很好地将一组复选框存储在一个列中。