插入ENUM列

时间:2009-08-23 11:13:46

标签: php mysql

我在db中有一个ENUM列,ENUM('us','uk','fr','intl')

我正在使用复选框来确认HTML中的国家/地区和PHP

SET country ='".$country_us." ".$country_uk." ".$country_fr." ".$country_intl."'

查询已通过,但未添加到列中。

如果我这样做

country ='$country_us'

- 它运作正常。

Here's我之前提出的更多信息问题。谢谢你的帮助!

4 个答案:

答案 0 :(得分:3)

ENUM一次只能是一个值。如果您想一次允许多个值,请使用SET

答案 1 :(得分:0)

听起来您正在尝试将多个值插入到单个ENUM列中。这是不可能的。

如果您只有一个国家/地区值,我建议您使用单选按钮,然后您的第二个示例将正常工作。但是,由于您可能希望country_us country_ukENUM列无法存储该信息。

更好的模型听起来就像你原来的问题中最好的解决方案。

答案 2 :(得分:0)

ENUM列表示您可以在其中存储仅一个值,该值必须是已定义的ENUM成员之一。

您应该将复选框转到单选按钮,这样用户只能选择一个国家/地区。在您的代码中,您将提取该单个值并将其插入到列中。

答案 3 :(得分:0)

您无法在(MySQL)ENUM列中存储多个值。 ENUM表示您可以准确插入为该列定义的值的一个。请改用SET列并更新其值,如下所示:

UPDATE ... SET country = 'uk,us';

即,分配以逗号分隔的允许值列表。有关详细信息,请参阅mysql documentation

更好的是,为此使用单独的表:

CREATE TABLE country (
    cty_id     INTEGER NOT NULL PRIMARY KEY,
    cty_code   CHAR(2) NOT NULL UNIQUE,
    cty_title  VARCHAR(30) NOT NULL,
);

CREATE TABLE map_story_country (
    story_id INTEGER,
    cty_id   INTEGER,
    PRIMARY KEY (story_id, cty_id)
);

然后,为您要分配到故事/文章的每个国家/地区插入ID映射。