ENUM sütunu içine INSERT

4 Cevap php

Ben bu yüzden, ENUM ('biz', 'uk', 'fr', 'intl') gibi db bir ENUM sütun var

Ben HTML ülkeyi onaylamak için onay kutularını kullanıyorum ve PHP

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

Sorgu geçer ama, kolona eklemez.

Ben sadece yaparsanız

country ='$country_us'

- Iyi çalışıyor.

Daha fazla bilgi için benim Here's bir önceki soru. Yardımlarınız için teşekkürler!

4 Cevap

Bir ENUM bir seferde sadece tek bir değer olabilir. Eğer, bir seferde birden çok değer izin kullanmak istiyorsanız SET.

Tek ENUM sütuna birden fazla değer eklemek için çalışıyoruz gibi geliyor. Bu, mümkün değildir.

Eğer tek bir ülke değeri olsaydı, ben radyo düğmelerini kullanarak tavsiye ediyorum, ve sonra ikinci örnekte doğru çalışması olacaktır. Eğer isteyebilirsiniz Ancak, country_us and country_uk, bir ENUM sütun bu bilgileri depolama yeteneğine sahip değildir.

Şey en iyi orijinal soruya ele gibi bunun için daha iyi bir model geliyor.

ENUM sütun bunu only one değerini saklamak anlamına gelir, ve bu değer tanımlanan ENUM üyelerinden biri olmak zorundadır.

Bir kullanıcı sadece bir ülkeyi seçebilirsiniz böylece, radyo düğmeleri için onay kutularını açmak gerekir. Kodunuzda, bu tek değer ayıklamak ve sütuna yerleştirin.

Bir (MySQL) ENUM sütunda birden fazla değer saklamanıza olamaz. ENUM tam olarak one sütun için tanımlanan değerlerden insert olabilir, anlamına gelir. Yerine SET sütun kullanmak ve bu gibi kendi değerlerini güncellemek:

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

Yani, izin verilen değerlerin bir virgülle ayrılmış liste atayabilirsiniz. Daha fazla bilgi için mysql documentation bakın.

Daha da iyisi, bu için ayrı tablolar kullanın:

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)
);

Sonra, hikaye / makalenin atamak istediğiniz her ülke için bir kimlik eşleme yerleştirin.